【问题标题】:The correct way to create Binary files in C#在 C# 中创建二进制文件的正确方法
【发布时间】:2014-03-30 07:39:43
【问题描述】:

我正在使用下面的代码创建一个Binary 文件。

var a = new[]
{
    "C50-12-25",
    "C50-12-20"
};

using (var bw = new BinaryWriter(File.Open("file.bin", FileMode.Create)))
{
    foreach (var i in a)
    {
        bw.Write(i);
    }
}

我打开了文件,但没有看到类似于我一直认为Binary 文件看起来像这样的图片。

http://www.dotnetperls.com/binary.png

我实际上能够阅读我所写的完整文本。

C50-12-25   C50-12-20

是这样吗?我对此完全陌生,因此任何能帮助我指明正确方向的帮助对我来说都很重要。

【问题讨论】:

  • 在十六进制编辑器中打开文件时的另一个注意事项:文件内容仅对文件长度有效。例如。如果您将 4 个字节写入文件,则前 4 个字节保证是正确的,但除此之外就是垃圾。这与文件的存储方式有关;它们根本不会单独存储 4 个字节。
  • @kayson 如果十六进制编辑器从磁盘读取原始数据而不是使用操作系统的文件处理功能,则只会显示超出文件长度的垃圾。我不认为这是一个真正的问题,自从诺顿磁盘编辑器以来,我还没有遇到过这样的十六进制编辑器。

标签: c# binarywriter


【解决方案1】:

您使用的Write 的重载:BinaryWriter.Write(String),使用编码写出您提供给文件的字符串。

您似乎想通过将这些字符串解码为十六进制值来将它们转换为二进制数据...除了它们看起来不像十六进制值,因为它们不是以 2 为一组的。无论如何,这个过程是记录在这里 (How can I convert a hex string to a byte array?)。

请注意,您发布的“图片”是十六进制编辑器。您没有在帖子中描述您是如何打开文件的;如果你在记事本或类似的编辑器中打开一个文件,那么你总是会得到打印的字符,而不是文件内容的十六进制表示。

【讨论】:

  • 谢谢戴,是的,我弄错了,图像是十六进制文件。但我的观点是,如果我使用这些方法编写任何东西,它可以以某种方式读入纯文本。我说的对吗?
  • @Vahid 我认为您需要更好地了解文件的真正含义,并阅读编码和“数据视图”的概念.您需要知道的一切都会在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多