• 締切済み

テキストファイルを保存しきれない

いつもありがとうございます。 iniファイルを置換して上書き保存するのですが、置換して保存すると保存後のファイルの最後のほうが切れて保存しきれていませんでした。 保存前→100行 保存後→80行 な感じです。コードが悪いんだと思いますが、どなたか教えていただけないでしょうか。 Dim FileObj13 As Object Dim ListFile13 As String Try FileObj13 = New IO.StreamReader(Foldername & "\CUS\UISetup.ini", System.Text.Encoding.Default) ListFile13 = FileObj13.ReadToEnd() FileObj13.Close() Catch ex As Exception MessageBox.Show("指定のファイルが見つかりません", "エラー", _ MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End Try '置換 ListFile13 = ListFile13.Replace("K", "G") ListFile13 = ListFile13.Replace("C5", "45") 'ファイルを上書きで保存するための指定 Dim writer13 As New System.IO.StreamWriter(Foldername & "\CUSUISetup.ini", False, System.Text.Encoding.Default) writer13.Write(ListFile13) Label2.Text = "完了"

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

writer13のCloseメソッドが無いため書き込みバッファのフラッシュがされていないのが原因かも知れませんよ Writeメソッドを実行した次の行で writer13.Close()を実行しましょう

関連するQ&A

  • インデックスが配列の境界外です。と出ます

    お世話になります。 VB2008でiniファイルの中身を書き換えるプログラムを作っているのですが ↓コード     Dim LineLists As String Dim FileObj As Object Dim ListFile As String Dim f As New Form2 If f.ShowDialog(Me) = DialogResult.OK Then Vertext.Text = f.TextBox1.Text End If Try FileObj = New IO.StreamReader(Foldername & "\CUS\Basic.ini", System.Text.Encoding.Default) ListFile = FileObj.ReadToEnd() FileObj.Close() Catch ex As Exception MessageBox.Show("指定のファイルが見つかりません", "エラー", _ MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End Try LineLists = Split(ListFile, ControlChars.CrLf) Dim ap As String ap = LineLists(11).Substring(11, 3) LineLists(11) = LineLists(11).Replace(ap, Vertext.Text) LineLists(1) = LineLists(1).Replace("K ", "G") LineLists(3) = LineLists(3).Replace("K", "G") LineLists(3) = LineLists(3).Replace("C5", "45") LineLists(69) = LineLists(69).Replace("Mos", "Gen") LineLists(75) = LineLists(75).Replace("Mos", "Gen") LineLists(81) = LineLists(81).Replace("Mos", "Gen") LineLists(292) = LineLists(292).Replace("L.EXE", "DL.EXE") LineLists(636) = LineLists(636).Replace("E_001=K_A.kmp", "E_001=KAA.kmp") まずiniファイルを1行ずつ配列に格納し、それを行指定して文字列を置換するのですが、ちょうど最後の636のところでエラーが出ます。 最初は、テキストボックスに書き込み、置換する文字列を1行ずつ検索していって置換するコードでしたが、あまりに処理時間がかかるのでこちらの方法でやっているのですが・・・ 上記の方法ではできましたが、こちらでやるとエラーが出てしまったので、解決策がわかりません。VB初めて2週間です。 どなたかよろしくおねがいします。

  • 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() どなたか、教えていただけませんでしょうか?

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

    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 といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • csvを新ファイルに8番目で大きい順に並び替え

    VB2010です。 前回、質問させて頂いた続きです。 前回は質問の仕方が失敗で大変皆様にご迷惑をおかけしました・・・・・ 本当に申し訳なく思っています・・・ もうだんだん迷路に入ってしまったので、コードをそのまま記載しました。 Itm(7)を基準に数字の大きい順に並び替えしたいのです。 CSVは全部で19列あります。 ファイルによって違いますが、行数はだいたい100行ぐらいです 無理やりしたのコードを書いたのですが、あと一歩でやはりきれいに並び替えができません・・・ 大変皆様にお手数ですがお助け下さい・・・・ プロの皆様にはかなり幼稚なコードで大変失礼します。 いろいろと試してみたのですが、これぐらいしか自分の力量では思いつかなくて・・・・ 沢山失敗を繰り返したので変なコードも入っているかもですが・・・・・ Dim z As Integer = 0 Dim ReaderA As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & ".csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineA As String = ReaderA.ReadLine Dim Itm() As String Dim s As Integer = 0 Do Until IsNothing(LineA) Itm = LineA.Split(",") If z = 0 Then Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Writer.WriteLine(LineA) Writer.Close() Else Dim ReaderB As New IO.StreamReader(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Writer As New IO.StreamWriter(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", False, System.Text.Encoding.GetEncoding("Shift-JIS")) Dim LineB As String = ReaderB.ReadLine Dim Stm() As String Dim u As Integer = 0 Do Until IsNothing(LineB) Stm = LineB.Split(",") If Integer.Parse(Itm(7)) > Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If Writer.WriteLine(LineB) If Integer.Parse(Itm(7)) <= Integer.Parse(Stm(7)) Then If u = 0 Then Writer.WriteLine(LineA) u += 1 End If End If s += 1 LineB = ReaderB.ReadLine Loop Writer.Close() ReaderB.Close() IO.File.Delete(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") Microsoft.VisualBasic.FileSystem.Rename(SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New2.csv", SyFolder & Me.Combo0.Text & "\Data\Sales\EachMonth\" & Me.ComboBox1.Text & "New.csv") End If z += 1 LineA = ReaderA.ReadLine Loop ReaderA.Close()

  • CSVファイルの出力に関して

    環境:Windows7 / VIsual Basic 2008 教えて下さい。 データベースの値を、CSVファイルとして出力する為に、以下のような記述を しましたが、どうしても下記のようなエラーとなってしまいます。 Cドライブの直下は記述すべきでなく、アクセス権がないのが原因かと思われますが、 なんとかCドライブの直下へ出力したいと考えています。 良い方法はないでしょうか? 《記述内容》  '保存先のCSVファイルのパス  Dim csvPath As String = "C:\ABC.csv"  'CSVファイルに書き込むときに使うEncoding  Dim enc As System.Text.Encoding = _  System.Text.Encoding.GetEncoding("Shift_JIS")  Try '開く Dim sr As New System.IO.StreamWriter(csvPath, False, enc)  Dim colCount As Integer = dtTable.Columns.Count   Dim lastColIndex As Integer = colCount - 1  以下省略・・・ 《エラー内容》  パス 'C:\ABC.csv' へのアクセスが拒否されました。 仮にアクセス権を付加するしか方法がないようであれば、申し訳ありませんが、 その方法も教えて頂ければと思います。 教えて下さい。 よろしくお願いします。

  • 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() 'テキストファイルを開いたときの内容 かきくけこ さしすせそ

  • .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()

  • VB6 テキストファイルへの保存方法

    みなさん教えてください。 いまVB6.0で、テキストボックス(textbox1)に入力するデータ(数値)を名前を指定するテキストファイルに内容を保存したいと考えています。 これをやろうと、下記のように構文を作成したのですが、何故かうまくいきません。 みなさんアドバイスを頂けないでしょうか。 宜しくお願いします。 Private Sub Command1_Click() Dim StrFN As String Dim sw As System.Io.StreamWriter 'テキストファイルを上書きで保存する StrFN = Application.GetSaveAsFilename("", "測定データ(*.txt),*.txt,全てのファイル(*.*),*.*", , "測定データファイル名指定") 'ダイアログ表示 If Dir(StrFN) <> "" Then If vbYes <> MsgBox("同名ファイルがあります。" & vbLf & _ "上書きしますか?", vbYesNo) Then Exit Sub End If End If sw = StrFN '書込み sw.Write (textbox1.Text) sw.Close () End Sub

  • すでにファイルが開かれている時のエラー回避

    VB2010で、ファイルを開いていると下記のコードでエラーがでます。 Dim SR As New System.IO.StreamReader(AppPath & "諸元一覧.csv", System.Text.Encoding.Default) 「諸元一覧.csv」ファイルを閉じてください。 とメッセージを出し、ExitSubしたいのですが、 どういうコードにすればよいのでしょうか。 教えてください。よろしくお願いいたします。

専門家に質問してみよう