这是一个简单的程序,我试图将几个变量写入二进制文件,然后再读回来。
我正在试图弄清楚如何从二进制文件中读取字符串。它写得正确。但每次我尝试阅读它(在这个例子中它是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);
答案 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);