日期:2014-05-17  浏览次数:20897 次

请问,FileStream写数据,报错?
这几天对FileStream简直头疼,看下面的代码:

class Program
  {
  static void Main(string[] args)
  {
  FileStreamWriteFile("我爱熊俊");
  Console.ReadKey();
  }
  public static void FileStreamWriteFile(string str)
  {
  byte[] byData;
  char[] charData = str.ToCharArray();;
  try
  {
  FileStream nFile = new FileStream(@"d:\love.txt", FileMode.Create);  
  charData = str.ToCharArray(); //获得字符数组  
  byData = new byte[charData.Length]; //初始化字节数组  
  Encoder enc = Encoding.UTF8.GetEncoder(); //将字符数组转换为正确的字节格式
  enc.GetBytes(charData, 0, charData.Length,byData,0,true);
  nFile.Seek(0, SeekOrigin.Begin);
  nFile.Write(byData, 0, byData.Length);
  }
  catch (Exception ex)
  {
  throw ex;
  }
  }  
  }

上面的代码,用FileStream 向文件写入文本,为什么报错呢----输出字节缓冲区太小,无法包含编码后的数据,编码“Unicode (UTF-8)”的操作回退“System.Text.EncoderReplacementFallback”

请问,哪里错了?

------解决方案--------------------
enc.GetBytes的长度,要大于 byData 的长度,byData 放不下,你要保证俩个数组长度一致

------解决方案--------------------
直接用StreamWriter写不就行了
------解决方案--------------------
C# code

public static void FileStreamWriteFile(string text,string filePath)
  {
      using(FileStream stream = new FileStream(filePath, FileMode.Create))
      {
          using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
          {
              writer.Write(text);
          }
                
       }
}

------解决方案--------------------
C# code
File.WriteAllText(@"d:\love.txt", "我爱熊俊", Encoding.GetEncoding("GB2312"));

------解决方案--------------------
http://www.cnblogs.com/tuyile006/archive/2007/01/08/614718.html
------解决方案--------------------
byte[] byData;声明的数组太小了,越界了
------解决方案--------------------
byData = new byte[charData.Length]; //初始化字节数组 
改成
 byData = new UTF8Encoding().GetBytes(str);
------解决方案--------------------
不用等了,我的方法是对的,测试过了