gpt4 book ai didi

delphi - TFileStream.WriteBuffer XE4 VS XE7

转载 作者:行者123 更新时间:2023-12-02 02:45:17 25 4
gpt4 key购买 nike

这段代码在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 上的 Delphi XE7 上运行完全相同的代码时,它失败并出现错误“Stream write error”。

最佳答案

TFileStream 构造函数中,您将 Mode 参数设置为 0 (fmOpenRead),并将 Rights fmOpenReadWrite 的参数。您需要交换它们:

//fl:= tFileStream.Create(filename, 0, fmOpenReadWrite);
fl:= tFileStream.Create(filename, fmOpenReadWrite, 0);

或者简单地说:

fl:= tFileStream.Create(filename, fmOpenReadWrite);

Mode参数中不存在fmCreate标志时,TFileStream调用FileOpen()而不是FileCreate().

在 XE4 中,当 TFileStream 调用 时,ModeRights 参数会进行OR组合在一起Windows 上的 FileOpen():

inherited Create(FileOpen(AFileName, Mode or Rights));
// which is: FileOpen(AFileName, fmOpenRead or fmOpenReadWrite)
// effectively: FileOpen(AFileName, fmOpenReadWrite)

这就是您的代码在 XE4 中运行的原因。您正在以读/写模式打开文件。

在 XE7 中,当 TFileStream每个平台上调用 FileOpen() 时,Rights 参数将被忽略:

inherited Create(FileOpen(AFileName, Mode));
// effectively: FileOpen(AFileName, fmOpenRead)

这就是为什么您的代码无法在 XE7 中运行的原因。您正在以只读模式打开该文件。

关于delphi - TFileStream.WriteBuffer XE4 VS XE7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31039742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com