2010-07-15 60 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,因为它可以处理文本数据,你可以设置文件的编码。