2013-04-16 72 views
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]」,並自動停止報價之後。

+0

我希望創建一個StringBuilder對象......所有值追加到它,然後喂該stringbuilder對象作家。 – highwingers

+0

[將多行寫入使用Visual Basic的文本文件]可能的重複(http://stackoverflow.com/questions/14903938/write-mutiple-lines-to-a-text-file-using-visual-basic) –

回答

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 

這是很容易做到,如果你動態地存儲在變量中的用戶偏好值建立串起來,而不是看起來很多更明智的硬編碼這一切。

+0

我做了你所說的,除了這一行外,它全部正常工作: '使用writer作爲StreamWriter =新StreamWriter(文件路徑) writer.Write(「[HealthBarSettings]」&vbNewLine&_ 「MaxHealthTicks = 50」&vbNewLine& 「MaxHealthMicroTicks = 100」 &vbNewLine&_ 「DefaultHealthPerMicroTick = 50」 &vbNewLine&_ 「DefaultHealthPerTick = 200」 &vbNewLine&_ 「DefaultHealthPerMegaTick = 1000」 &vbNewLine&_ &vbNewLine&_等...' 但是在最後一行的開頭,我得到了「Expressio預期「 – user2288508

0

把所有的文本(行)在一個數組,並使用

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

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

它會寫在正確的格式新行所有的文本行。 Text in file

0

如何與一個字符串生成器

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

這是爲了做到這一點,因爲該字符串生成器對象是不是重複連接字符串更有效的好辦法做到這一點的例子,詳細情況進行說明Here

+1

不一定。你必須時間確定,但我對StringBulder在這裏是否會有性能優勢持懷疑態度。你不是在一個循環中建立字符串,所以這可以很好地優化。盲目遵循規則不是編寫優化代碼的好方法。有很多的場景,StringBuilder會產生比替代方案更慢的代碼,儘管我不能確定這是沒有測試的情況。 –

+0

這是一個很好的觀點,我已經閱讀了很多地方,當stringbuilder超過3個附加時,它的速度更快,但我不確定.NET如何處理這種情況,因爲它基本上只是一行代碼 –

0

科迪格雷提到它非常清楚,所以我不知道你是如何設法得到最後一行錯誤。

請記住,你所做的一切實際上是一個很長的字符串來保存。如果你願意,你可以把所有東西寫在一行上。

vbnewline增加一個換行符(清除),&簽名就緒它會添加另一行,並且您看到的下劃線用於允許代碼*顯示在多行上(可選)。

作者的最後一段代碼應該是。

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

End Using 

表達預期的錯誤你得到聽起來像是你有與&符號結束,或下劃線字符。它應該如上所述結束,最後一個字符串值在「引號」和一個右括號中。

當開始vb.net時,我發現將所有東西加在一起成爲一個單一的字符串變得更容易,然後把字符串放入寫入器中。浪費時間到最後,但可以放在一起使用string = string &值更清楚一點。

+0

是的,你需要右括號。猜猜我應該輸入其餘的代碼。我感到很懶,認爲這很明顯。 –

+0

很明顯。如果你做得更清楚,只需複製和粘貼代碼就簡單多了。 –

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