2

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

我试图弄清楚如何从二进制文件中读取字符串。它写对了。但是每次我尝试读取它(在这个例子中它是 4 个字节)时,结果都很奇怪,这会把所有东西都扔掉。b = "jump",但无论我如何尝试阅读和转换,最终结果都会变得很奇怪。然后在它之后读取的变量 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); 
4

3 回答 3

2

是什么让你觉得“JUMP”占用了 4 个字节?

BinaryWriter.Write(字符串):

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

于 2013-02-13T02:00:52.580 回答
2

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

于 2013-02-13T02:01:48.647 回答
2

BinaryReader.ReadString(). I just tested your code and it appears to work fine:

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);
于 2013-02-13T02:04:08.517 回答