试图从二进制文件中读取字符串

时间:2013-02-13 01:53:16

标签: c# string binaryfiles msdn

这是一个简单的程序,我试图将几个变量写入二进制文件,然后再读回来。

我正在试图弄清楚如何从二进制文件中读取字符串。它写得正确。但每次我尝试阅读它(在这个例子中它是4个字节),结果出来真的很奇怪,这会抛出一切。 b =“跳跃”,但无论我如何尝试阅读和转换,最终结果都会变得奇怪。然后在它之后读取的变量b也变得很奇怪。

从二进制文件中读取字符串的正确方法是什么?我的所有字符串都是固定长度,不管怎样,15个字符。有没有办法在不转换为char数组的情况下执行此操作?

我还尝试了.ReadCharArrays()方法,然后是toString(),我仍然没有读取正确的变量。

string path = ".//..//..//..//";

FileStream mfs = new FileStream(path + "test.bin", FileMode.OpenOrCreate, FileAccess.ReadWrite);
BinaryReader br = new BinaryReader(mfs);
BinaryWriter bw = new BinaryWriter(mfs);

short a = 2;
short b = 3;
string c = "JUMP";
bw.Write(a);
bw.Write(c);
bw.Write(b);

Console.WriteLine("Done writing to binary file");
br.BaseStream.Seek(0, SeekOrigin.Begin); //Apprantly you have to seek to beginning

a = br.ReadInt16();
c = br.ReadBytes(4).toString();
b = br.ReadInt16();

Console.WriteLine(""+a);
Console.WriteLine(""+c);
Console.WriteLine("");
Console.WriteLine("" +b); 

3 个答案:

答案 0 :(得分:2)

是什么让你认为“JUMP”占用4个字节?

  

BinaryWriter.Write(字符串):

     

以BinaryWriter的当前编码将长度为前缀的字符串写入此流,

答案 1 :(得分:2)

你应该使用BinaryReader.ReadString()来读回字符串 - ReadBytes读取一个字节数组,默认字符串是.NET中的unicode。

答案 2 :(得分:2)

BinaryReader.ReadString()。我刚刚测试了你的代码,它似乎工作正常:

a = br.ReadInt16();
string d = br.ReadString(); // store in another variable just to be sure..
b = br.ReadInt16();

Console.WriteLine("" + a);
Console.WriteLine("" + d); // JUMP
Console.WriteLine("");
Console.WriteLine("" + b);