.net 中的 StringBuilder 不写入整个文件
StringBuilder in .net not writing entire file
我正在尝试编写一个文本文件。这是我的主要内容,为清楚起见略微剪掉了:
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 有很多小附加问题,这就是我在潜艇中使用 TempSB 的原因,但它有完全相同的问题,如果我直接将它们添加到 SB 而不是唯一的区别是 "break" 出现在前面几个字符。
任何人都可以就可能发生的情况提供建议吗?
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())
我正在尝试编写一个文本文件。这是我的主要内容,为清楚起见略微剪掉了:
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 有很多小附加问题,这就是我在潜艇中使用 TempSB 的原因,但它有完全相同的问题,如果我直接将它们添加到 SB 而不是唯一的区别是 "break" 出现在前面几个字符。
任何人都可以就可能发生的情况提供建议吗?
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())