1

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

我的代码是:

  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]”并在此之后自动结束引用。

4

5 回答 5

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

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

于 2013-04-16T23:29:16.303 回答
0

Cody Gray 非常清楚地提到了它,所以我不确定你是如何在最后一行出现错误的。

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

vbnewline 添加一个换行符(清除),准备好的&符号添加另一行,您看到的下划线用于允许代码*显示在多行上(可选)。

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

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

End Using

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

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

于 2013-04-18T13:05:48.403 回答
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()
于 2014-11-20T06:42:23.453 回答
0

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

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

这是一个很好的方法,因为字符串生成器对象比重复连接字符串更有效,详细信息在这里

于 2013-04-17T05:06:49.397 回答
0

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

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

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

它将以正确的格式将所有文本行写入新行。 文件中的文本

于 2013-04-17T03:23:20.620 回答