DeleteFile不起作用

问题描述 投票:3回答:3

[似乎在我的代码中的某个地方,我正在使用的文件以某种方式搁置了它,因为我似乎无法删除它。我的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和InFileName匹配CopyFile例程

无论如何,我总是遇到错误,尝试删除该文件。这与文件大小有关吗?我仅在文件大小<= 0

时复制和删除
delphi delphi-7
3个回答
11
投票

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

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

RaiseLastOSError

我认为问题与您所显示的代码无关,所以这里列出了要检查的事项:

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

我要做的另一件事:当出现关于无法删除文件的异常时,在IDE中点击RUN之前,我先进入Windows资源管理器并尝试自己删除文件。


0
投票

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


0
投票

[20年4月3日星期五9:51。我将确认在一些我不打算调查的随机条件下,Delphi7不会删除零长度文件。在我的程序中,它可以删除'em的one,但不能删除2nd,但是我确信您的随机里程会有所不同。我在各种情况下都将它们用作标志,所以现在我只是“回显愚蠢的消息> stupid〜file”,因此它是not空。

[10:29 am。天哪,我忘了德菲精英们的好心! ...无论如何,我出色的解决方案没有用。似乎DeleteFile,Windows和Delphi无法可靠地在Windows 10中删除此处的文件,即使它不是空的也是如此。如果我能解决的话,我将以欣喜的心情返回,假设巨魔不会烧毁大地并永远禁止我....

© www.soinside.com 2019 - 2024. All rights reserved.