在窗口上有两个按钮,一个用来生成一个二进制文件,一个用来读取二进制文件的内容。
为什么总是在读取时报错呢?
procedure TF_DatFile.BitBtn1Click(Sender: TObject);
var
FS: TStream;
begin
FS:=TFileStream.Create('c:\1.dat', fmCreate or fmOpenWrite);
try
FS.Write('**TI',4*Sizeof(char));
finally
FS.Free;
end;
end;procedure TF_DatFile.BitBtn2Click(Sender: TObject);
var
FS: TStream;
Str:string;
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
try
FS.Read(Str,4*sizeof(char));
showmessage(str);
finally
FS.Free;
end;end;
在读取按钮点取时总是报告“Access violation at address 00404364.Read of address 49542a22.”
请问这是怎么回事?
为什么总是在读取时报错呢?
procedure TF_DatFile.BitBtn1Click(Sender: TObject);
var
FS: TStream;
begin
FS:=TFileStream.Create('c:\1.dat', fmCreate or fmOpenWrite);
try
FS.Write('**TI',4*Sizeof(char));
finally
FS.Free;
end;
end;procedure TF_DatFile.BitBtn2Click(Sender: TObject);
var
FS: TStream;
Str:string;
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
try
FS.Read(Str,4*sizeof(char));
showmessage(str);
finally
FS.Free;
end;end;
在读取按钮点取时总是报告“Access violation at address 00404364.Read of address 49542a22.”
请问这是怎么回事?
var
FS: TStream; //------>改为 FS:TFileStream;
Str:string;
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
try
FS.Read(Str,4*sizeof(char));
showmessage(str);
finally
FS.Free;
end;
procedure TF_DatFile.BitBtn2Click(Sender: TObject);
var
FS: TStream;
Str: PChar;//
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
GetMem(Str, 4*sizeof(char))
try
FS.Read(Str,4*sizeof(char));
showmessage(str);
finally
FreeMem(Str);
FS.Free;
end;end;
问题出在这一行,FS.Read(Str,4*sizeof(char)); 中的 Str 是一个 String;
我比较认同 linzhengqun(风。爱的翔舞) 的做法。
如果按照你的思路也可以这么做。procedure TF_DatFile.BitBtn2Click(Sender: TObject);
var
FS: TStream;
Str:string;
begin
FS:=TFileStream.Create('c:\1.dat', fmOpenRead);
try
SetLength(Str,FS.Size);
FS.Read(Str[1],4*sizeof(char));
ShowMessage(str);
finally
FS.Free;
end;
end;以上代码 Delphi 6 下测试通过,没有问题。