我正在尝试将整数写入二进制文件,但它一直在二进制文件中给出奇怪的字符。例如,我尝试写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();
答案 0 :(得分:4)
我认为问题在于你没有正确地阅读数据。
您需要使用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所提到的,你通常想要使用积木包装一次性物品。
答案 1 :(得分:1)
你在文件中获得意外字符的原因是因为你写入文件的内容并不是首先被解释为一系列字符
当你在记事本或其他文本编辑器中打开它时,它只会占用那里的东西,猜测编码(或使用默认值),并显示数据在编码字符时编码的字符数。它不是人类可读的。
具有字符序列2000
的人类可读文本文件实际上具有字符2
的编码,然后编码0
3次。
在Unicode中U+0032U+0030U+0030U+0030