• ベストアンサー

VB.NETで、テキストファイルを読取専用で開く

VB.NET、Windowsフォームで、Buttonを押したらあるテキストファイルを読取専用で開く、という事をしたいと思っています。 Dim fileName As String = "c:\test.txt" '読取専用にする File.SetAttributes(fileName, File.GetAttributes(fileName) Or FileAttributes.ReadOnly) 'ファイル開く System.Diagnostics.Process.Start(fileName) '読取専用を解除 File.SetAttributes(fileName, myAttr Xor FileAttributes.ReadOnly) 上記のように記述したのですが、読取専用にはなるのですが、ファイルに変更を加えてそのまま保存出来てしまいます。 何か良い方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1さんの言うとおりです。 System.Diagnostics.Process.Start(fileName) ↓ System.Diagnostics.Process.Start(fileName).WaitForExit()

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

起動したプロセスで変更保存しようとする前に >読取専用を解除 しているのではないでしょうか? 起動したプロセスが終了したのを確認してからにするべきでは?

関連するQ&A

  • VB2005でのファイル操作について

        Dim filedata As String Dim fileNum As Integer Dim fileName As String Dim i As Integer fileName = "C:\Paradata.txt" fileNum = FreeFile() FileOpen(fileNum, fileName, OpenMode.Output) For i = 0 To 9 filedata = data(i, 0) & "," & data(i, 1)・・・・・ PrintLine(fileNum, filedata) Next FileClose あるボタンを押しますと上記のようにテキストファイルにデータを保存しようとしているのですが、1回目のボタンクリックではエラーが無いのですが2回目以降は"別のプロセスで使用されているため、プロセスはファイル 'C:\Paradata.txt' にアクセスできません。"のエラーが発生してしまいます。いろいろと調べているのですがまだわからないのでどこがおかしいか教えてください。よろしくお願い致します。

  • Fileの読み取り専用の解除

    いつもお世話になっています。 ちょっと気になったので、質問させて頂きました。 現在、Fileを使用して、読み取り専用の設定を行っているのですが、 その際、一度「読み取り専用」にしてしまったら、 解除は不可能なのでしょうか? 作成したクラスが、 String fileName = "dataList.txt"; File file = new File(fileName); String str = "あいうえお"; String sep = System.getProperty("line.separator"); //読み取り設定 file.setReadOnly(); try{ FileWriter fw = new FileWriter(file); fw.write(str); fw.write(sep); fw.write(str); fw.flush(); fw.close(); }catch(FileNotFoundException e) { }catch(IOException i){} //ここで読み取り専用を解除したい if(file.canRead() ) { System.out.println("可能です"); } if(file.canWrite()){ System.out.println("書き込み可"); }else { System.out.println("不可"); } 気になって元のFileクラスのソースをみてみたのですが、 /**readOnlyメソッドのみ、抜粋 **/ public boolean setReadOnly() { //Securityの設定 SecurityManager security = System.getSecurityManager(); //securityの確認  if (security != null) { //この時のpathは fileNameとおなじこと security.checkWrite(path); } //ここを設定してなかったら、読み取り専用にはならない気が.. return fs.setReadOnly(this); } で、どうしてもわからないのが、FileSystemクラスのnativeメソッドを呼んでいることなのですが、このnativeメソッドがどうやって機能しているのかがわかりません。 宜しくお願いします。

  • VB6でUTF-8ファイルの読取りを

    VB6で、日本語と簡体文字の混在するUTF-8コードのファイル "c:\testfile.txt" を読み取って変数に入れて、取り扱える実例を作っていただけませんでしょうか? VB6では、FileSystemObjectなどを使うようですが、さっぱり使い方が分りません。私は昔、コボルやフォートランをかじったことがあり、VBの基礎は使えるのですが、FileSystemObjectなどはどうも分りません。Visual Basic.NETを使えばUTF-8も簡単に使えるようですが、難しくて歯が立たずVB6でやろうとしています。 ご参考;「次のコードは、FileSystemObject を使って、ファイルの読み取りまたは書き込みに使用できる TextStream オブジェクトを取得する例です。」とあるのですが、ファイルから変数に読み取るために使うには如何使えば良いのか、分りません。 Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\testfile.txt", True) MyFile.WriteLine("This is a test.") MyFile.Close また、下記は「指定したファイルを開き、開いたファイルの読み取り、または追加書き込みに使用できる TextStream オブジェクトを返します。」とあるのですが、これとの関係もよくわかりません。 object.OpenTextFile(filename[, iomode[, create[, format]]]) よろしくお願いいたします。

  • VB.NETでサーバーからFILEを取得する

    サーバー上にあるテキストファイルを FTPで取得したいのですが VBであればInetを使用して↓のように取得が可能 だったのですがVB.NETでのInetの使用方法がわかりません どなたかご存知の方がいらしたらご教授願えますか? また、別の方法がありましたらアドバイスをお願いします。 宜しくお願いいたします。 ==================== Dim FileName As String Inet.URL = "ftp://hostname/home/temp/" Inet.UserName = "username" Inet.Password = "password" Inet.Execute(, "GET test.txt " & FileName) Do While Inet.StillExecuting = True DoEvents() Loop MsgBox("ダウンロード終了") ====================

  • VB6.0 でのテキストファイルの表示

    .net では、readstream でがばっととって、テキストボックス(読み取り専用)に表示しました。 これと同様のことをVB6.0でチャレンジしたのですが、テキストボックスに表示されるのは最初の一行だけでした。マルチラインのテキストボックス設置後 Private sub command1_click() Dim data as string Open "ファイルパス" for input as #256 Do while EOF(256) line input #256, data loop text1.text=data としたところ、ファイル内の最初の一行目に位置する「%」のみが表示されました。 readonlyもつかえないみたいなので、Listを使うのがよいのでしょうか?ご教示下さい

  • VBのテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class

  • EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

    EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。 原因と対策を教えて頂きたいです。 ------------------------------------------------------- Dim FileName1 As String Dim FileName2 As String Dim FileNumber1 As Integer Dim FileNumber2 As Integer Dim Data As String FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt") FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") Data = Space(FileLen(FileName1)) FileNumber1 = FreeFile Open FileName1 For Binary As #FileNumber1 Get #FileNumber1, , Data Close #FileNumber1 'この間に"Data"内容を処理するコードを入れる予定 FileNumber2 = FreeFile Open FileName2 For Binary As #FileNumber2 Put #FileNumber2, , Data Close #FileNumber2 ------------------------------------------------------- このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。 "Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。

  • VB2005でのテキストファイルのアクセス権

    ある条件の下テキストファイルを出力していますが、 出力ファイルを開いた状態で、再度ツールを実行すると 「別のプロセスが・・・アクセスできません。」 というエラーにはじかれてしまいます。 現在VB2005を使用していますが、以前VB6のときはエラーに なりませんでした。 ※Excelの場合はエラーになっていましたけど。 以下私のコードを抜粋 strNewDirはString型でパスが入っています。 Dim stFile As Stream = New FileStream(strNewDir, FileMode.OpenOrCreate) Dim encSJIS As Encoding = Encoding.GetEncoding("shift-jis") Dim swSJIS As StreamWriter = New StreamWriter(stFile, encSJIS) ・・・ swSJIS.Close() という形でファイルアクセスしています。 New FileStreamには[Access]や[Share]などがあるようで、 いろいろ試しましたが、どうもうまくいきません。 ご存知の方いらっしゃいますか?

  • VB2010 テキスト書き出し位置

    VisualBasic初心者です。 VB2010でフォームでフォームから複数のTextBoxに入力したものを Buttonクリックイベントでテキストファイルに書き込みを行おうと思っています。 その際、テキストファイルへの書き込み位置を指定したいと思っています。 TextBox1の内容はテキストファイルの1文字目から10文字目 TextBox2の内容は11文字目から20文字目という感じにしたいです。 現在下記のプログラムです。 どなたかご教授ください。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) write_data.Write(Textbox1.text) write_data.Close() End Sub

  • テキストファイルとして開くVBA

    フォルダC:\Users\USER\Desktop\あいう において このダイアログを開いて そのなかのファイル(A.xml)を txtファイルとして開いて その名前を テキスト.txt として 同名で保存したいのですが Dim FileName As Variant Dim NewFile As TextFile FileName = Application.GetOpenFilename() Set NewFile = TextFile.Open(FileName) NewFile.SaveAs "テキスト.txt" Activetxtfile.SaveAs FileName:="C:\Users\PC\Desktop\あいう\テキスト.txt", FileFormat:=TextFile どうも違うようです 御教示ください