gpt4 book ai didi

file - 分配文件() : File access denied

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

我想创建一个 .txt 文件并在运行时随时写入。为此,我使用 AssignFile() 函数。但在我的文件已经存在的情况下,我遇到了麻烦。我收到一条错误消息:文件访问被拒绝

为了更好地解释,请参阅以下两个示例:

Ex1:如果我在文件不存在时第一次调用AssignFile(),好的!但是,如果该文件存在,则此操作不起作用。

Ex2:如果我第二次调用AssignFile()(当AssignFile()第一次成功时),这也会发生不工作。

这是 AssignFile() 函数中的错误吗?

var
myfile: TextFile;

Procedure WriteFileContent(const MyTxtFile: string; MyNumber: DWORD);
var
F: TextFile;
Begin
If FileExists(MyTxtFile) Then
Begin
AssignFile(F, MyTxtFile);
Rewrite(F);
Writeln(F, '0x' + IntToHex(MyNumber,8));
CloseFile(F);
End;
End;

begin
try

// Calling AssignFile() by first time
AssignFile(myfile, 'myfile.txt');
Rewrite(myfile);
CloseFile(myfile);
setfileattributes('myfile.txt', FILE_ATTRIBUTE_HIDDEN);

Sleep(5000);

// Calling AssignFile() by second time
WriteFileContent('myfile.txt', 123456789);

except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.

最佳答案

失败的不是 AssignFile(),而是您对设置了 Hidden 属性的文件调用 Rewrite() 失败。下面解释一下:

通常,您会调用 Rewrite(F) 来删除文件并使用后续的 Write(F, ...) 向其中写入新数据WriteLn(F, ...) 调用。

来自文档(System.Rewrite):

If an external file with the same name already exists, it is deleted and a new empty file is created in its place.

使用 Append() 命令打开文件进行写入没有问题。

(根据上述内容,我得出的结论是,删除失败,并出现拒绝访问消息。这太偷工减料了。)

<小时/>

由于评论的影响,我跟踪了代码并将实际代码与 CreateFile 的 MSDN 文档进行了比较:

实际代码:

// if mode is fmOutput (as it is for Rewrite)
OpenMode = GENERIC_WRITE
Flags = CREATE_ALWAYS
// ...
Temp := CreateFile(t.Name, OpenMode, FILE_SHARE_READ, nil, Flags, FILE_ATTRIBUTE_NORMAL, 0);

documentation :

If CREATE_ALWAYS and FILE_ATTRIBUTE_NORMAL are specified, CreateFile fails and sets the last error to ERROR_ACCESS_DENIED if the file exists and has the FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM attribute.

对具有 hidden 属性的现有文件调用 Rewrite() 总是失败。

关于file - 分配文件() : File access denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413343/

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