这段代码在Delphi XE4上运行得非常好:
var
b: byte;
fl: TFileStream;
filename:string;
begin
b:= $2F;
filename:='C:\test.exe';
fl:= tFileStream.Create(filename, 0,fmOpenReadWrite);
fl.Position:= $C;
fl.WriteBuffer(b,sizeof(b));
fl.free
end;但是,当我在同一台PC上运行完全相同的XE7代码时,它会出现“”错误。
发布于 2015-06-25 02:07:24
在TFileStream构造函数中,将Mode参数设置为0 (fmOpenRead),将Rights参数设置为fmOpenReadWrite。你需要交换它们:
//fl:= tFileStream.Create(filename, 0, fmOpenReadWrite);
fl:= tFileStream.Create(filename, fmOpenReadWrite, 0);或者简单地说:
fl:= tFileStream.Create(filename, fmOpenReadWrite);当fmCreate标志不存在于Mode参数中时,TFileStream调用FileOpen()而不是FileCreate()。
在XE4中,当Windows上的Mode和Rights调用FileOpen()时,TFileStream参数将一起编辑:
inherited Create(FileOpen(AFileName, Mode or Rights));
// which is: FileOpen(AFileName, fmOpenRead or fmOpenReadWrite)
// effectively: FileOpen(AFileName, fmOpenReadWrite)这就是您的代码在XE4中工作的原因。您正在以读/写模式打开文件。
在XE7中,当TFileStream在每个平台上调用FileOpen()时,TFileStream参数将被忽略:
inherited Create(FileOpen(AFileName, Mode));
// effectively: FileOpen(AFileName, fmOpenRead)这就是为什么您的代码不能在XE7中工作的原因。您正在以只读模式打开文件.
https://stackoverflow.com/questions/31039742
复制相似问题