2010-07-15 45 views
1

爲什麼這個代碼不寫我的字符串的文件到文件:無法寫入使用的BinaryWriter

string file = "Myfile.txt"; 
     MemoryStream ms = new MemoryStream(); 

void writeToFile(string text) 
     { 
      System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding(); 
      byte[] barr = encoding.GetBytes(text); 


      ms.Write(barr, 0, barr.Length); 

      using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate)) 
      { 
       using (BinaryWriter bw = new BinaryWriter(ms)) 
       { 
        bw.Write(ms.ToArray()); 
       } 
      } 
     } 


     static void Main(string[] args) 
     { 

      Program p = new Program(); 

      p.writeToFile("Tony Test"); 

      Console.ReadLine(); 

     } 
+0

究竟發生了什麼?錯誤,空文件? – 2010-07-15 09:26:24

回答

10

看這句話:

using (BinaryWriter bw = new BinaryWriter(ms)) 

你寫回MemoryStream。你想:

using (BinaryWriter bw = new BinaryWriter(fs)) 

話雖如此,這是一個非常討厭的方式寫入文件,與各種不必要的步驟。希望這只是試驗,試圖找出爲什麼別的東西不能正常工作 - 但如果你真正的代碼是,實際上是這樣,請給出你想要做的事情的細節,我們可以幫你整理它。

+0

這是從我寫的一段生產代碼複製而來的,它沒有寫入文件,我試圖調試它。你能告訴我什麼是討厭的嗎?它真的應該採取一個內存流並將內容(字符串)寫入文件... – 2010-07-15 09:48:33

+0

該代碼強制進程複製'MemoryStream'的所有​​內容(使用'ToArray()'調用)。見例如http://stackoverflow.com/questions/230128/best-way-to-copy-between-two-stream-instances-c更好的方法。 – 2010-07-15 09:51:11

+0

謝謝,那麼ToArray調用複製的內容多於鏈接中提供的方法? – 2010-07-15 10:18:11

0

或者:

File.WriteAllText("myfile", "mytext"); 
3

您正在使用的輸入和輸出的MemoryStream毫秒。 行

using (BinaryWriter bw = new BinaryWriter(ms)) 

更改爲

using (BinaryWriter bw = new BinaryWriter(fs)) 
0

你正在編寫文本wtih可能最難的方式。你應該使用File.WriteAllText(如Adam所說)或追加文本方法。如果你想使用一個編碼器而不是你應該使用的StreamWriter,因爲它可以處理文本數據,你可以設置文件的編碼。