【问题标题】:Writing to .bin binary file写入 .bin 二进制文件
【发布时间】:2013-05-09 07:13:42
【问题描述】:

我正在尝试将整数写入二进制文件,但它一直在二进制文件中给出奇怪的字符。例如,我尝试写 2000,但在文件中我会得到一些奇怪的东西。我如何解决它?在任何地方都找不到解决方案。

我使用以下代码:

 //create the file
        FileStream fs = new FileStream("iram.bin", FileMode.Create);
        // Create the writer for data.
        BinaryWriter w = new BinaryWriter(fs);

w.Write((int) 2000);

w.Close();
fs.Close();

【问题讨论】:

  • FileStreamBinaryWriter 都实现了IDisposable 接口。将它们的用法包装在 using 块中并放弃显式的 .Close()s。

标签: c# file file-io binary


【解决方案1】:

我认为问题在于您没有正确读取数据。

您需要像这样使用 BinaryReader 读回数据...

    using (FileStream fs2 = new FileStream("iram.bin", FileMode.Open))
    {
        using(BinaryReader r = new BinaryReader(fs2))
        {
            var integerValue = r.ReadInt32();
        }
    }

当然,除非您确实想将文本写入文件,在这种情况下您可能不希望 BinaryWriter 将数据写出。

如果你真的想写出文本数据,你可以这样做......(确保将你的编码设置为你需要的)

    using (var tw = new StreamWriter("iram.txt", true, Encoding.ASCII))
    {
        tw.WriteLine(2000);
    }

编辑:正如 Jesse 所说,您通常希望将一次性对象包装在 using 块中。

【讨论】:

    【解决方案2】:

    您在文件中收到意外字符的原因是因为您写入文件的内容一开始并不意味着被解释为字符序列

    当您在记事本或其他文本编辑器中打开它时,它只会获取那里的内容,猜测编码(或使用默认值),并向您显示数据将编码的任何字符(如果它是编码字符)。它不适合人类阅读。


    具有字符序列2000 的人类可读文本文件实际上具有字符2 的编码,然后是0 的编码3 次。

    在 Unicode 中是 U+0032U+0030U+0030U+0030

    【讨论】:

    • 嗯,不。 OP 将 2000 转换为 int,所以它是 0x7D0,或者二进制,可能是 4 个字节 0000 0111 1101 0000。不是 Unicode
    • @DanPichelman 你误解了那部分。我试图说明一个文件中的编码可能是什么,如果他在文本编辑器中打开它会显示"2000"
    • @DanPichelman 我这样做是为了说明二进制文件和可读文件之间的区别
    • @DanPichelman:我相信它会写成 little-endian: 00, D0, 07, 00。
    猜你喜欢
    • 2014-08-13
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多