.net中的StringBuilder没有写整个文件

时间:2017-10-13 16:24:43

标签: vb.net stringbuilder

我正在尝试编写一个文本文件。这是我的主要内容,为了清晰起见略微修剪:

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而不是唯一的区别就是“中断”早些时候出现了几个字符。

有人可以就可能发生的事情提出建议吗?

1 个答案:

答案 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())