.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如何处理这种情况,因为它本质上只是一行代码