我的 win32 程序创建了一个二进制文件,其后只有一个字符串 [32] 和一个整数。然后,我编写了一个 .NET 程序来读取同一个文件。
这是我的 .NET 代码:
method ReadUnitFile;
var
FHeader:TFileHeader;
Biread:BinaryReader;
FUnitLoc:String;
begin
FUnitLoc := baseDir+'\system\Units.dat';
if Environment.OSVersion.Platform = System.PlatformID.Unix then
FUnitLoc := baseDir+'/system/Units.dat';
if File.Exists(FUnitLoc) then
begin
Biread:= new BinaryReader(File.OpenRead(FUnitLoc));
FHeader.id:=Biread.ReadString;
FHeader.version:=Biread.ReadInt32;
Biread.Close;
end;
end;
它可能无法读取文件。实际上,它引发了“读取超出文件末尾”异常。原因是字符串长度正好是 32 个字符。我相信 BinaryReader 没有这些信息。因此,它读取的字符串超过 32 个字符。因此,它无法正确读取二进制文件。
那么,在这种情况下,如何读取 .NET 框架下的二进制 win32 文件呢?
更新
这是我的 .NET 更新代码:
method ReadUnitFile;
var
FHeader:TFileHeader;
Biread:BinaryReader;
FUnitLoc:String;
tmparray:array[0..32] of char;
begin
FUnitLoc := baseDir+'\system\Units.dat';
if Environment.OSVersion.Platform = System.PlatformID.Unix then
FUnitLoc := baseDir+'/system/Units.dat';
if File.Exists(FUnitLoc) then
begin
Biread:= new BinaryReader(File.OpenRead(FUnitLoc));
Biread.Read(tmparray,0,32);
FHeader.id := tmparray.ToString;
FHeader.version:=Biread.ReadInt32;
Biread.Close;
end;
end;
虽然这可行,但我似乎无法从 tmparray 中检索字符串。FHeader.id 是字符串类型。ToString 似乎无法正常工作。在这行代码之后,FHeader.id 等于“System.Char[]”。它实际上并不包含字符串本身。
任何的想法?
提前致谢,