DeleteFile не работает - PullRequest
       22

DeleteFile не работает

3 голосов
/ 22 марта 2011

Кажется, что где-то в моем коде файл, с которым я работаю, каким-то образом удерживает его, потому что я не могу удалить его.Кажется, моя подпрограмма 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 </p>

Ответы [ 2 ]

11 голосов
/ 22 марта 2011

Если вы не знаете, почему не удалось удалить файл, почему бы не сообщить об этом операционной системе?Замените этот код:

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

на

RaiseLastOSError

Я не думаю, что проблема связана с кодом, который вы показываете, поэтомуВот список вещей, которые нужно проверить:

  • Файл не только для чтения.
  • Файл не на носителе только для чтения.
  • Пользователь, запущенныйПриложение имеет право удалить файл.
  • Файл не используется.

Еще одна вещь, которую я бы сделал: Когда исключение не в состоянии удалитьфайл поднимается, прежде чем я нажму RUN в IDE, я пойду в Windows Explorer и попробую удалить файл самостоятельно.

0 голосов
/ 22 марта 2011

Почему вы не используете вместо копирования, а затем удаления функцию MoveFile () или MoveFileEx ()?
Он выполняет ту же работу, но функция MoveFile () Windows API не может переименовывать / перемещать файлы между дисками.

...