【问题标题】:I cannot delete a just created textfile我无法删除刚刚创建的文本文件
【发布时间】: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


【解决方案1】:

我找到了自己问题的答案。我已经提到我不是 Delphi 程序员,所以我没有注意到我的更改之前的另一个剩余语句:

FSource := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyNone);

删除该语句解决了我的问题;显然,该语句锁定了我的文件,直到程序关闭。无论如何,感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多