• ベストアンサー

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

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

  • VB2008 txtファイル保存

    こんにちは、Vb2008を勉強しています。 デスクトップに保存している、TXTファイルに、 フォームで入力したデータを追加保存したいと思い、ネットで調べたり…で 入力しましたが、txtファイルを開いてみると文字化けしてしまします。 Dim writer As System.IO.FileStream = _ System.IO.File.OpenWrite("C:\Users\Desktop\顧客管理.txt") 'SystemWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(writer) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine(TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text) 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() writer.Close() 上記の方法で文字化けだったので、またまた、調べて入力しましたが 今度は、改行されず…単純な、データの追加のようになってしまっています。 私は、新しい行に追加できるようにしたいです。 下のコードは文字コードの指定をしたので、保存はできますが、 改行されません。 Dim FileName As String = "C:\Users\Desktop\確認.txt" Dim Writer As IO.StreamWriter Dim Encode As System.Text.Encoding '文字コードにShiftJISを指定。 Encode = System.Text.Encoding.GetEncoding("Shift-JIS") '既に存在するテキストに追加する場合は第2引数をTrueにする。 Writer = New IO.StreamWriter(FileName, True, Encode) Writer.Write(TextBox1.Text & "," & TextBox2.Text) Writer.Close() どなたか、教えていただけませんでしょうか?

  • VB 配列の内容をファイルに書き込む

    VB2008を使用しています。 stg_bitという配列に一文字ずつ「abc・・・」 のように入っているものを、テキストファイルに出力したいのですが・・・ stg_bitという配列の内容をファイルに書き込みたいのですが、 うまくいきません。 ご教授お願いします!! Dim i As Integer Dim stg_str As String Dim Writer As New IO.StreamWriter("C:sample.txt") Writer.WriteLine(stg_bit) Writer.Close()

  • ファイルに追記していくには?

    お世話になります。 vb2005を使用しております。 Dim Writer As New IO.StreamWriter("C:\VTest.txt") Writer.WriteLine(TextBox1.Text) Writer.Close() for loopでまわすたびにtextbox1の内容がかわるというfor loopの中にこのようなコードを記述しているのですが、これだと追記できず上書きされてしまって困っています。追記する形にするにはどうすればよろしいでしょうか?教えてください。お願いします。

  • ファイルを読み込み各行の両端にダブルクオーテーションをつけて保存するには?

    お世話になります。 テキストファイルを読み込みファイルの各行の両端に"をつけたいのです。たとえば、 今日は友人と焼肉を食べに行った。 雨の中、外を歩くのはつらかったが、 久々に会える友達のため東京まででかけた。 という文があったとしてプログラムを通しての出力結果が "今日は友人と焼肉を食べに行った。" "雨の中、外を歩くのはつらかったが、" "久々に会える友達のため東京まででかけた。" というように出力されるようにしたいのです。 下記のコードを自分で考えてみましたが、テキストファイルに保存がうまくできませんでした。どうすればよろしいでしょうか? 教えてください。お願いします。 Dim Reader As New IO.StreamReader("C:\aa.txt") Do Until Reader.EndOfStream ListBox1.Items.Add(Chr(&H22) & Reader.ReadLine & Chr(&H22)) Loop Reader.Close() Dim dtmStart As DateTime = DateAdd(DateInterval.Second, 10, Now) Do While Now < dtmStart Application.DoEvents() Loop Dim Writer As New IO.StreamWriter("C:\bb.txt") Writer.WriteLine(ListBox1.Text) Writer.Close() End Sub

  • VB.NET テキストファイルにデータを書き込み

    テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとします。 このテキストファイルに「あいうえお」を先頭に追加で書き込みたいのですが、どうすればいいのでしょうか? あくまで「かきくけこ」を変数化せずファイルに直接、書き込む方法がある場合、教えてください。 'テキストファイルを開いたときの内容 あいうえお かきくけこ ちなみにですが、テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとして、 末尾に「さしすせそ」を追加で書込みする方法は下記の通りでした。 'ファイルを書き込み用に開く、指定したファイルがない場合は作成する dim fsFile As System.IO.FileStream = _ System.IO.File.OpenWrite("c:\test.txt") 'StreamWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = _ New System.IO.StreamWriter(fsFile) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine("さしすせそ") 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() fsFile.Close() 'テキストファイルを開いたときの内容 かきくけこ さしすせそ

  • 重複データを書き込まないようにするには?(VB)

    VB(2010)初心者です。 ボタンクリックで、テキストボックスに入力したデータをテキストファイルに 追加書き込みしていますが、同じデータは書き込めないようにしたいです。 下記コードにどのような記述を付け加えたら良いのでしょうか。 Dim fsFile As System.IO.FileStream = System.IO.File.OpenWrite("C:\List.txt") Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fsFile) sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) sw.WriteLine(TextBox1.Text) sw.Flush() sw.Close() fsFile.Close()

  • .NETで文字列のエンコードの仕方+ファイル操作

    .NETで文字列のエンコードの仕方が知りたいです。 あと、ファイル操作についてわかりやすいホームページを探しています。 '指定したファイルに文字列を追加します Dim filename as String = "test.txt" Dim data as string = "美味ソ溝" System.IO.File.AppendAllText(filename, data, System.Text.Encoding.GetEncoding("euc-jp")) 'これと同じことを以下のStreamWriterでしたいのですが、文字のエンコードの方法がわかりません。どのようにすればうまくいきますか。 Dim filename as String = "test.txt" Dim data as string = "美味ソ溝" Dim fs As System.IO.FileStream = System.IO.File.OpenWrite(filename) Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(fs) sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) '書き込む前にエンコード?? sw.WriteLine(data) sw.Flush() sw.Close() fs.Close()

  • 一時ファイルをsavefileDialogを利用して保存するにはどのようにしたら良いのでしょうか?

    環境:VS2005 C# プログラム上でコメントアウトしてある様なやり方ではなく、 一旦、一時ファイルを作成しそのファイルをダイアログで保存先を任意のフォルダに保存したいのですがやり方はあるのでしょうか? OpenFileDialog ofd = new OpenFileDialog(); //一時ファイルを作成する string file_name = Path.GetTempFileName(); System.IO.StreamWriter writer = new StreamWriter(file_name); writer.WriteLine("tmptest"); writer.Close(); //ダイアログを表示 ofd.ShowDialog(); /*******************************▼コメントアウト System.IO.Stream stream; stream = ofdfilecommit.OpenFile(); if (stream != null) { //ファイルに書き込む System.IO.StreamWriter sw = new System.IO.StreamWriter(stream, 文字コード); sw.WriteLine("test"); //閉じる sw.Close(); stream.Close() } ********************************▲コメントアウト*/ //オブジェクトの破棄 ofd.Dispose(); ご協力お願いします。

  • textファイルの内容の削除について(C#です)

    C#でプログラミングをしています。 WriteLineを使って、textに書き込みをしているのですが、最後いったんこのファイルに書き込んだ文字をすべて消去できるようにしたいんですが、どのように書けばいいですか? 例えば、 StreamWriter writer = new StreamWriter("E:\\sample\\sample.txt"); writer.WriteLine("りんご"); と書き込んで、最後に「りんご」という文字を全て消去できるようにしたいんです。初心者なので、あんまり分からないので教えて下さい(><)

  • シリアル受信データをファイルに書き出したい

    マイコンとPCをCOMポートで通信し、受信データをファイルに書き出したいのです。 やってみたこと1.と2.の間を埋める技術についてアドバイスをお願いします。 1.キーボード入力したテキストボックスの内容をファイルに書き出す ⇒書けました、OK     Dim xxx As New System.IO.StreamWriter("e:xxx.txt", False, System.Text.Encoding.Default) xxx.WriteLine(TextBox1.Text) xxx.Close() 2.サンプルコードでシリアル通信 ⇒受信データがテキストボックスに表示されました、OK     以下サイトを参考に勉強中、テキストボックス部分を抜粋させて頂きます     (http://www.kana-soft.com/tech/sample_0008_4.htm#1) 3.2.で表示されたテキストボックスの内容を、1.のように書き出したいのですが   上手くいきません。'■から'■間に xxx.WriteLine(RcvTextBox.Text) 書いてみましたが   e:xxx.txtは作成されません。delegate、invokeの理解不足が原因かと思うのですが、   調べ回るうちに・・・限界みたいです。(^_^;) (抜粋) '===== Private Delegate Sub Delegate_RcvDataToTextBox( data As String ) '===== Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Try '受信データを読み込む. Dim data As String data = SerialPort1.ReadExisting() '受信したデータをテキストボックスに書き込む. Dim args(0) As Object args(0) = data Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), args) Catch ex As Exception MsgBox( ex.Message ) End Try End Sub '===== Private Sub RcvDataToTextBox( data As String ) '受信データをテキストボックスの最後に追記する. If IsNothing( data ) = False Then RcvTextBox.AppendText( data ) End If '■     Dim xxx As New System.IO.StreamWriter("e:xxx.txt", False, System.Text.Encoding.Default) xxx.WriteLine(RcvTextBox.Text) xxx.Close()     '■ End Sub ===== 以上、駄目出しをよろしくお願いします。

専門家に質問してみよう