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

时间:2013-04-16 23:23:53

标签: .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 = 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]”并在此之后自动结束报价。

5 个答案:

答案 0 :(得分:2)

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

如果您使用存储在变量中的用户首选项值动态构建字符串,而不是对其进行硬编码,那么这样做会更加容易并且看起来更加明智。

答案 1 :(得分:0)

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

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

        File.WriteAllLines(@"c:/temp/test.txt", arr);

它会以正确的格式在新行中写入所有文本行。 Text in file

答案 2 :(得分:0)

如何使用字符串构建器

执行此操作的示例
Dim sb as new StringBuilder
sb.appendLine("Line1")
sb.appendLine("Line2")
File.writeAllLines(filePath, sb.toString())

这是一种很好的方法,因为字符串构建器对象比重复连接字符串更有效,详细信息为Here

答案 3 :(得分:0)

Cody Gray非常清楚地提到了这一点,所以我不确定你是怎么设法在最后一行得到错误的。

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

vbnewline添加换行符(清除),& sign ready它会添加另一行,你看到的下划线用于允许代码*显示在多行上(可选)。

作者的最后一点代码应该是。

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

End Using

你得到的表达预期错误听起来像你已经以&符号或下划线字符。它应如上所示结束,最后一个字符串值在“quotes”和一个右括号中。

当开始使用vb.net时,我发现将所有内容添加到单个字符串中更容易,然后将字符串放入编写器中。最后浪费时间,但可以使用string = string& amp;值。

答案 4 :(得分:0)

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

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