我想在任何运行时刻创建一个 .txt 文件并向其中写入内容。为了实现这一点,我使用了 AssignFile() 函数。但是在文件已经存在的情况下,我遇到了问题。我会收到一个错误,上面写着:“文件访问被拒绝”。
为了更好地解释这个问题,看看这两个例子:
Ex1:如果我第一次调用 AssignFile() 函数时文件不存在,那么没问题!但是,如果文件存在,这就无法工作。
Ex2:如果我第二次调用 AssignFile() 函数(当第一次调用成功时),这也无法工作。
这是否是 AssignFile() 函数中的一个漏洞?
为了更好地解释这个问题,看看这两个例子:
Ex1:如果我第一次调用 AssignFile() 函数时文件不存在,那么没问题!但是,如果文件存在,这就无法工作。
Ex2:如果我第二次调用 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.
C:\Program Files
中,并且正在尝试访问应用程序文件夹中的文件,则标准用户无法对其进行写入访问。你应该将文件写入用户配置文件夹中的一个文件夹中。Win32 API有函数可以确定用户配置文件夹的位置。 - Remy Lebeausetfileattributes('myfile.txt', FILE_ATTRIBUTE_HIDDEN);
这行代码,会发生什么? - Tom Brunberg