我正在尝试编写一个文本文件。这是我的主要内容,为了清晰起见略微修剪:
Private Sub WriteProperty(FilePath As String)
Try
SB = New StringBuilder
WriteConfig()
'a bunch of methods similar to WriteConfig here...
Dim File As New System.IO.StreamWriter(FilePath)
File.WriteLine(SB.ToString())
Catch ex As Exception
Dim X As Integer = 5 'cheesy way to add a breakpoint
End Try
End Sub
这是大约十几个为文件添加文字的潜艇之一:
Private Sub WriteConfig()
Dim TempSB As New StringBuilder
TempSB.AppendLine("[CONFIG]")
TempSB.AppendLine("[END_CONFIG]")
TempSB.AppendLine("")
SB.Append(TempSB)
End Sub
大约有十几种方法可以添加这样的东西,大多数方法在这个例子中添加了大约2k的文本而不是几行。当我在调试器中检查SB时,总结果长度超过15k。但是当我打开文件时,它是12k,并且结尾都是缺失的 - 它在其中一个字符串的中间切断。没有例外。
我知道SB有很多小附加的问题,这就是为什么我在sub中使用了TempSB,但它有完全相同的问题,如果我将它们直接添加到SB而不是唯一的区别就是“中断”早些时候出现了几个字符。
有人可以就可能发生的事情提出建议吗?
答案 0 :(得分:3)
StreamWriter使用内部缓冲区。您需要Close()您的StreamWriter强制它将剩余的缓冲数据写入文件。更好的是,将它包装在Using语句中。这将调用它的Dispose(),然后调用它的Close()。
Using File As New System.IO.StreamWriter(FilePath)
File.WriteLine(SB.ToString())
End Using
有一种方便的方法可以在一行中为您完成此任务:
System.IO.File.WriteAllText(FilePath, SB.ToString())