DeleteFile无法正常工作

时间:2011-03-22 11:30:20

标签: delphi delphi-7

似乎在我的代码中的某个地方,我正在使用的文件以某种方式保留它,因为我似乎无法删除它。我的CopyFile例程似乎工作,但在我完成复制后,我似乎无法删除它。

   FSize:=  GetFileSizeExt(InPath + InFileName);
   if FSize <= 0 then
   begin
    //archive file
    if  AfterAction = 'MOVE' then
    begin
     tmpExt:= ExtractFileExt(InFileName);
     if CopyFile(PChar(InPath + InFileName), PChar(MovePath + '\' + ChangeFileExt(InFileName,'') + '_' + FormatDateTime('mmddyyyy-hhmmss', Now) + tmpExt), True) then
     begin
      if not DeleteFile(pchar(InPath + InFileName)) then
      begin
       ExitCode:= 8;
       raise ECustomException.Create('Invalid After Action. Error Deleting File!');
      end;
     end //if CopyFile
     else //if not DeleteFile
     begin
      ExitCode:= 16;
      raise ECustomException.Create('File Copy Error!');
     end; //else
    end; //if  AfterAction = 'MOVE' then
     ExitCode:= 17;
     raise ECustomException.Create('Error Getting file size OR file size less than or equal to zero!');
   end; //if filesize =0

当我在线上设置断点时 如果不是DeleteFile
它总是最终提高异常。 InPath&amp; InFileName匹配中使用的 CopyFile例程

无论如何,我总是得到错误尝试删除文件。这与文件大小有关吗?我只复制和删除文件大小&lt; = 0

2 个答案:

答案 0 :(得分:11)

如果您不知道删除文件失败的原因,为什么不让操作系统告诉您?替换此代码:

raise ECustomException.Create('Invalid After Action. Error Deleting File!');

RaiseLastOSError

我不认为问题与您展示的代码有关,所以这里有一个要检查的事项列表:

  • 该文件不是只读文件。
  • 该文件不在只读媒体上。
  • 运行应用程序的用户有权删除该文件。
  • 该文件未在使用中。

我要做的另一件事:当引发关于无法删除文件的异常时,在我在IDE中运行RUN之前,我将转到Windows资源管理器并尝试自己删除该文件。

答案 1 :(得分:0)

为什么不使用MoveFile()或MoveFileEx()函数而不是复制然后删除? 它执行相同的工作,但Windows API MoveFile()函数无法跨驱动器重命名/移动文件。