• ベストアンサー

ファイルの作成からその使用に際して

VB2008Expressでプログラミング中です。 早速ですが、この度ボタンを押すと3種の.txtファイルを作成し、ある文字列をそこに保存する、といったプログラムが必要になったのですが不具合がでて困っています。 sub createfile() IO.file.create("d:\1.txt") IO.file.create("d:\2.txt") IO.file.create("d:\3.txt") end sub private sub button_click()handles button1.click call createfile() Dim Writer As New IO.StreamWriter("d:\1.txt") Writer.WriteLine(Richtextbox1.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\2.txt") Writer.WriteLine(Richtextbox2.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\3.txt") Writer.WriteLine(Richtextbox3.Text) Writer.Close() end sub といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

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

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

IO.file.create("d:\1.txt") IO.file.create("d:\2.txt") IO.file.create("d:\3.txt") この処理でファイルが閉じられていないからです。 IO.File.Create() メソッドは FileStream オブジェクトを返すので、それを使って Close() メソッドを書きましょう。 そんでもって更に Using ステートメントを使ってオブジェクトの破棄を保証させましょう。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Call CreateFile()  Using writer As New IO.StreamWriter("d:\hoge1.txt")   writer.WriteLine(RichTextBox1.Text)   writer.Close()  End Using  Using writer As New IO.StreamWriter("d:\hoge2.txt")   writer.WriteLine(RichTextBox2.Text)   writer.Close()  End Using  Using writer As New IO.StreamWriter("d:\hoge3.txt")   writer.WriteLine(RichTextBox3.Text)   writer.Close()  End Using End Sub Private Sub CreateFile()  Using fs As IO.FileStream = IO.File.Create("d:\hoge1.txt")   If Not (fs Is Nothing) Then    fs.Close()   End If  End Using  Using fs As IO.FileStream = IO.File.Create("d:\hoge2.txt")   If Not (fs Is Nothing) Then    fs.Close()   End If  End Using  Using fs As IO.FileStream = IO.File.Create("d:\hoge3.txt")   If Not (fs Is Nothing) Then    fs.Close()   End If  End Using End Sub

negi0810
質問者

お礼

ありがとうございます^^

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

'Call createfile() Dim Writer1 As New IO.StreamWriter("d:\1.txt") Writer1.WriteLine("aaa") Writer1.Close() Dim Writer2 As New IO.StreamWriter("d:\2.txt") Writer2.WriteLine("bbb") Writer2.Close() Dim Writer3 As New IO.StreamWriter("d:\3.txt") Writer3.WriteLine("ccc") Writer3.Close() Dim Writer の変数名を分けて、 call createfile() をコメントにしたら出来ました。 IO.file.create でテキストファイルを作成しているのに、 As New IO.StreamWriter で同じファイル名のテキストファイルを作成しようとしたためでは? と思います。

関連するQ&A