【发布时间】:2018-07-09 10:57:39
【问题描述】:
当我创建一个文本文件时,接下来将它复制到另一个目录,然后尝试删除原始文件,它不会起作用,因为程序会锁定文件。 在删除文件之前,我将文件属性设置为“正常”,如下所示:
SetFileAttributes((pchar('C:\test')),FILE_ATTRIBUTE_NORMAL);
我找不到任何简单的解决方案来解决这个问题。 我这样创建文件:
bestand:= tstringlist.Create;
try
r:= FindFirst('test.*', faAnyFile, Res);
try
EOFound:= False;
if (r = 0) then
while not EOFound do
begin
bestand.Add(res.Name);
EOFound:= FindNext(Res) <> 0;
end;
finally
FindClose(Res);
end;
finally
bestand.SaveToFile('C:\test');
bestand.Free;
end;
只读取这样的文件也会出现同样的问题:
AssignFile(Txt,TmpBest);
Reset(Txt);
while not Eof(Txt) do
begin
Readln(Txt, s);
L.Items.add.caption:=s;
end;
CloseFile(Txt);
稍后,我将文件属性设置为“正常”并尝试删除该文件:
if CopyFile(pchar(file-org), pchar(file-dest), false) then
begin
SetFileAttributes(pchar(file-org),FILE_ATTRIBUTE_NORMAL);
if not DeleteFile(file-org) then
showmessage('delete ' + file-org + ' failed!');
其中 file-org 是上述描述中的文件 Txt/TmpBest。 我必须说:我不是 Delphi 程序员;我用 COBOL 编写,但是从一位前同事那里“继承”了这个 Delphi 程序,需要对其进行一些更改。
【问题讨论】:
-
您究竟是如何尝试复制和删除文件的?在您尝试之前,您的程序是否存在/关闭?
-
这就是我所做的:如果 CopyFile(pchar(file-org), pchar(file-dest), false) 然后开始 SetFileAttributes(pchar(file-org),FILE_ATTRIBUTE_NORMAL);如果不是 DeleteFile(file-org) 那么 showmessage('delete ' + file-org + ' failed!');其中 file-org 是上述描述中的文件 Txt/TmpBest。我不是 Delphi 程序员;我用 COBOL 编写,但是从一位前同事那里“继承”了这个 Delphi 程序,需要对其进行一些更改。
-
请编辑您的问题并在此处添加格式正确的代码。注释不是包含代码的地方。否则其他读者可能找不到它并且更难阅读。
-
在我知道的任何当前 Windows 文件系统上,普通用户都没有对“C:\”的写访问权限 - 你确定你的程序不会更早地失败吗?
-
关闭文件后文件系统锁定可能会持续数十毫秒。这是正常的 Windows 行为,与 Pascal 或 Cobol 无关。插入一个小延迟,它可能会正常工作。
标签: pascal file-locking