【问题标题】:Write Byte array to file将字节数组写入文件
【发布时间】:2014-04-10 10:55:31
【问题描述】:

我尝试将byte array 写入txt file,结果是乱码而不是我的字节

这是我的功能:

public bool ByteArrayToFile(string _FileName, byte[] _ByteArray)
{
   try
   {
      // Open file for reading
      System.IO.FileStream _FileStream = 
         new System.IO.FileStream(_FileName, System.IO.FileMode.Create,
                                  System.IO.FileAccess.Write);
      // Writes a block of bytes to this stream using data from
      // a byte array.
      _FileStream.Write(_ByteArray, 0, _ByteArray.Length);

      // close file stream
      _FileStream.Close();

      return true;
   }
   catch (Exception _Exception)
   {
      // Error
      Console.WriteLine("Exception caught in process: {0}",
                        _Exception.ToString());
   }

   // error occured, return false
   return false;
}

结果:

"3DUf " E  _Xu  €ˆ‏
=2‡¬1p% n Kפ C  

【问题讨论】:

  • 您希望输出是什么样的?
  • 如何生成_ByteArray
  • 另外,你的命名约定很奇怪,本地人应该是camelCase,没有下划线。并且返回一个布尔值来表示成功/失败在.Net中也是不受欢迎的。异常应该是用来指示失败的方法。我只会删除那个 try/catch - 让任何错误冒泡,直到你可以真正有意义地处理它,即使这只是一个记录它并退出的顶级处理程序。
  • 你的代码是正确的,向我们展示_ByteArray变量内容。
  • 这个内容是来自 PcapDotNet 项目的数据包字节[] (packet.buffer return byte[])

标签: c# .net


【解决方案1】:

您编写的代码看起来不错,但解决方案要简单得多:

public bool ByteArrayToFile(string fileName, byte[] byteArray)
{
   System.IO.File.WriteAllBytes(fileName, byteArray);
   return true;
}

我尝试将字节数组写入txt文件

在这种情况下,字节数组应该是文本的正确表示,采用某种编码。

我怀疑您在生成byteArray 的步骤中存在一些编码问题。

【讨论】:

  • 这个内容是来自 PcapDotNet 项目的数据包字节[] (packet.buffer return byte[])
【解决方案2】:
  1. 文件流最好使用using,或者在finally块中调用Close()
  2. 没有“文本文件”。文本只是一组字节,字节表示为带有编码(ASCII、Unicode、UTF8 等)的符号。当您写入字节时,系统会按原样写入它们,而当您使用记事本查看文件时,它会显示带有编码的文件(它读取 0x31 并显示 1,依此类推)。
  3. 如果你正在尝试写文本文件,期待File.WriteAllText()方法

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多