首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TFileStream.WriteBuffer XE4 VS XE7

TFileStream.WriteBuffer XE4 VS XE7
EN

Stack Overflow用户
提问于 2015-06-25 01:25:05
回答 1查看 860关注 0票数 1

这段代码在Delphi XE4上运行得非常好:

代码语言:javascript
复制
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代码时,它会出现“”错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 02:07:24

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

代码语言:javascript
复制
//fl:= tFileStream.Create(filename, 0, fmOpenReadWrite);
fl:= tFileStream.Create(filename, fmOpenReadWrite, 0);

或者简单地说:

代码语言:javascript
复制
fl:= tFileStream.Create(filename, fmOpenReadWrite);

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

在XE4中,当Windows上的ModeRights调用FileOpen()时,TFileStream参数将一起编辑:

代码语言:javascript
复制
inherited Create(FileOpen(AFileName, Mode or Rights));
// which is: FileOpen(AFileName, fmOpenRead or fmOpenReadWrite)
// effectively: FileOpen(AFileName, fmOpenReadWrite)

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

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

代码语言:javascript
复制
inherited Create(FileOpen(AFileName, Mode));
// effectively: FileOpen(AFileName, fmOpenRead)

这就是为什么您的代码不能在XE7中工作的原因。您正在以只读模式打开文件.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31039742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档