2013-01-18 188 views
0

代碼:意外字符使用SaveFileDialog

private void btnSaveFile_Click(object sender, EventArgs e) 
{ 
    listBox1.MultiColumn = true; 
    SaveFileDialog sfd = new SaveFileDialog(); 
    sfd.Filter = "Text File|*.txt"; 
    if (sfd.ShowDialog() == DialogResult.OK) ; 
    { 
     string path = sfd.FileName; 
     BinaryWriter bw = new BinaryWriter(File.Create(path)); 
     foreach (string s in hello) 
     { 
      bw.Write(s + Environment.NewLine); 
     } 
    } 

輸出

this

我真的不知道如何擺脫這些字符。

回答

3

如果要寫入文本文件,請不要使用BinaryWriter。它附加了字符串的長度,解釋了爲什麼你要觀察那些奇怪的字符。

你可以使用TextWriter

using (var fileStream = File.Create(path) 
using (var writer = new StreamWriter(fileStream)) 
{ 
    foreach (string s in hello) 
    { 
     writer.Write(s + Environment.NewLine); 
    } 
} 

或在這個特殊的例子,你可以縮短所有這些代碼以一個單一的代碼行中使用WriteAllLines方法:

if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    string path = sfd.FileName; 
    File.WriteAllLines(path, hello); 
} 

另外要小心!您在if聲明後有尾隨;。這意味着無論用戶確認還是取消了文件對話框,寫入文件都會發生總是。注意我在最後一個例子中是如何刪除它的。

+0

要添加,在寫入字符串之前,「BinaryWriter」會附加字符串的長度(7位編碼二進制形式)。這就是造成問題的原因 –

0

嘗試:

StreamWriter sw = new StreamWriter(path); 

的StreamWriter是非常理想的文件中寫入文本。而BinaryWriter將二進制原始類型寫入流並支持以特定編碼寫入字符串。

+0

謝謝我和我使用 foreach (string s in hello) { sw.WriteLine(s); }