2013-05-14 118 views
0

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

我使用下面的代码:

//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(); 
+3

'FileStream'和'BinaryWriter'都实现了'IDisposable'接口。将它们的用法封装在'using'块中,并放弃显式的'.Close()'。 –

回答

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); 
    } 

编辑:杰西提到你通常要使用块包裹一次性物品。

1

你在文件中出现了意外字符的原因是因为你写的文件是什么并不意味着当你在记事本中打开它被解释为字符的序列中的第一个地方

或其他文本编辑器,它只会采取那里的内容,猜测编码(或使用默认值),并显示数据将编码的任何字符(如果它是编码字符)。它不是为了人类的可读性。


具有字符序列2000实际上具有字符2的编码,接着的0 3倍编码人可读的文本文件。

以Unicode是U+0032U+0030U+0030U+0030

+0

恩,没有。 OP将2000转换为int,所以它是0x7D0,或者是二进制,可能是4个字节0000 0111 1101 0000.不是Unicode –

+0

@DanPichelman你误解了那部分。我试图说明什么编码可能会在会显示'“2000”'如果他在文本编辑器打开 –

+0

这一个文件@DanPichelman我这样做是为了说明一个二进制文件,一个可读的文件 –