.net 如何一次将多行文本写入一个文件?

.net 如何一次将多行文本写入一个文件?,.net,vb.net,file-io,multiline,streamwriter,.net,Vb.net,File Io,Multiline,Streamwriter,我需要一次向一个文件写入大量文本,但它必须以特定的方式格式化,而不是全部在一行中 我的密码是: If System.IO.File.Exists(filepath) Then Using reader As StreamReader = New StreamReader(filepath) sLine = reader.ReadToEnd End Using Using writer As StreamWriter =

我需要一次向一个文件写入大量文本,但它必须以特定的方式格式化,而不是全部在一行中

我的密码是:

  If System.IO.File.Exists(filepath) Then
        Using reader As StreamReader = New StreamReader(filepath)
            sLine = reader.ReadToEnd
        End Using

        Using writer As StreamWriter = New StreamWriter(filepath)
            writer.Write("[HealthBarSettings]
            MaxHealthTicks = 50
            MaxHealthMicroTicks = 100
            DefaultHealthPerMicroTick = 50
            DefaultHealthPerTick = 200
            DefaultHealthPerMegaTick = 1000

            TickAlpha = 200
            MicroTickAlpha = 140
            MicroTickHeight = 0.5
            MegaTickAlpha = 255
            TickThickness = 1.0
            MicroTickThickness = 1.0
            MegaTickThickness = 2.0

            UseCompression = 1
            GoTransparent = 1

            [GeneralDataHero]()
            FadeTimerForHealthBar = 2.0
            ZeroHealthAlpha = 225
            FullHealthAlpha = 200
            DefaultChampionCollisionRadius = 65.0")

        End Using
        MsgBox("File Written")
    Else
        MsgBox("File does not exist")
    End If
但这不起作用,因为它不会使用所有文本,只使用
“[HealthBarSettings]”并在此之后自动结束报价。

VB.NET不支持多行字符串文字。您必须自己手动指示换行符

例如:

If System.IO.File.Exists(filepath) Then
    Using reader As StreamReader = New StreamReader(filepath)
        sLine = reader.ReadToEnd
    End Using

    Using writer As StreamWriter = New StreamWriter(filepath)
        writer.Write("[HealthBarSettings]" & vbNewLine & _
        "MaxHealthTicks = 50" & vbNewLine & _
        "MaxHealthMicroTicks = 100" & vbNewLine & _
        "DefaultHealthPerMicroTick = 50" & vbNewLine & _
        "DefaultHealthPerTick = 200" & vbNewLine & _
        "DefaultHealthPerMegaTick = 1000" & vbNewLine & _
        vbNewLine & _
        "TickAlpha = 200" & vbNewLine & _
        "MicroTickAlpha = 140" & vbNewLine & _
        "MicroTickHeight = 0.5" & vbNewLine & _
        "MegaTickAlpha = 255" & vbNewLine & _
        "TickThickness = 1.0" & vbNewLine & _
        "MicroTickThickness = 1.0" & vbNewLine & _
        "MegaTickThickness = 2.0" & vbNewLine & _
        vbNewLine & _
        "UseCompression = 1" & vbNewLine & _
        "GoTransparent = 1" & vbNewLine & _

        ' etc...

    End Using
    MsgBox("File Written")
Else
    MsgBox("File does not exist")
End If
如果您使用存储在变量中的用户首选项值动态构建字符串,而不是对其全部进行硬编码,那么这样做会容易得多,而且看起来更合理。

将所有文本(行)放在一个数组中并使用

        var arr = new[]{ "MaxHealthTicks = 50","MaxHealthMicroTicks = 100","DefaultHealthPerMicroTick = 50",
        "DefaultHealthPerTick = 200", "DefaultHealthPerMegaTick = 1000"};

        File.WriteAllLines(@"c:/temp/test.txt", arr);
它将以正确的格式在新行中写入所有文本行。

如何使用字符串生成器执行此操作的示例

Dim sb as new StringBuilder
sb.appendLine("Line1")
sb.appendLine("Line2")
File.writeAllLines(filePath, sb.toString())

这是一个很好的方法,因为string builder对象比重复连接字符串更有效,提供的详细信息Cody Gray非常清楚地提到了这一点,所以我不确定最后一行是如何出错的

请记住,您所做的只是制作一个要保存的长字符串。如果你愿意,你可以把整件事写在一行上

vbnewline添加一个换行符(清除),&sign ready's it do添加另一行,您看到的下划线用于允许代码*显示在多行上(可选)

编写器的最后一位代码应该是

..."[GeneralDataHero]()" & vbNewLine & _
"FadeTimerForHealthBar = 2.0" & vbNewLine & _
"ZeroHealthAlpha = 225" & vbNewLine & _
"FullHealthAlpha = 200" & vbnewline & _
"DefaultChampionCollisionRadius = 65.0")

End Using
您得到的表达式预期错误听起来像是以&symbol或下划线字符结束。它应该如上所示结束,最后一个字符串值在“引号”中,并用一个右括号括起来


在开始使用vb.net时,我发现将所有内容添加到一个字符串中,然后将该字符串放入编写器更容易。最后会浪费时间,但可以使用string=string&value更清晰地组合起来。

类似的注意事项,如果要将文本框中的多行文本保存到文件中,请使用以下代码:

    Dim iText As New System.IO.StreamWriter("C:\Test.txt", True)

    For Each iLineTxt As String In Textbox1.Lines
        iText.WriteLine(iLineTxt)
    Next

    iText.Close()

我更喜欢创建一个stringBuilder对象…将所有值附加到它,然后将该stringBuilder对象馈送给writer。可能的重复项我按照您所说的做了,除了这一行之外,所有操作都正常:`Using writer As StreamWriter=New StreamWriter(filepath)writer.Write(“[HealthBarSettings]”和vbNewLine&\u“MaxHealthTicks=50”&vbNewLine&"MaxHealthMicroTicks=100”&vbNewLine&"DefaultHealthPermicroTicks=50”&vbNewLine&"DefaultHealthPerTicks=200”&vbNewLine&"DefaultHealthPerMegaTick=1000”&vbNewLine&&"vbNewLine&&vbNewLine&&"vbNewLine&&&&"等等"是的,你需要那个右括号。我想我也应该键入其余的代码。我觉得很懒,认为这是显而易见的。这是显而易见的。如果你把它弄得更清楚的话,复制和粘贴你的代码就更容易了。不一定。你必须计时才能完全确定,但我怀疑StringBulder是否会这样做这里有一个性能优势。你没有在循环中构建字符串,因此这可以得到很好的优化。盲目地遵循规则不是编写优化代码的好方法。在很多情况下,StringBuilder生成的代码会比备选方案慢,尽管我不能确定这是一个没有测试的代码。这是一个尝试顺便说一句,我在很多地方都读到,当stringbuilder有3个以上的附件时,它会更快,但我不确定.NET如何处理这种情况,因为它本质上只是一行代码