Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > SHFileOperation ошибка 1026 при удалении каталогов


Автор: ajs 7.6.2013, 14:59
На Windows XP (на 7-ке вроде работало, но сейчас проверить не могу) функция SHFileOperation не хочет удалять каталоги (пустые, если есть файлы пока не проверял), файлы удаляет. Delphi XE2
Функция:
Код

Function DeleteToRecycleBin(WindowHandle: HWND; Filename: string; Confirm: Boolean): Boolean;
  Var
    SH: TSHFILEOPSTRUCT ;
    EC: Integer ;

  Begin
    FillChar(SH, SizeOf(SH), 0) ;
    With SH do
      Begin
        Wnd    := WindowHandle ;
        wFunc  := FO_DELETE ;
        pFrom  := PChar(Filename+#0#0) ;
        fFlags := FOF_SILENT or FOF_NOERRORUI ;
        If GlobalRecycleBin
          Then
            fFlags := fFlags or FOF_ALLOWUNDO ;
        If not Confirm
          Then
            fFlags := fFlags or FOF_NOCONFIRMATION
      End ;
    EC := SHFileOperation(SH) ;
    Result := EC = 0 ;
    WriteToLog(llDebug,'Delete '+Filename+IfThen(GlobalRecycleBin,' to recycle bin','')+' with result '+IntToStr(EC)+'.') ;
    If EC = 1026
      Then
        Begin
          WriteToLog(llDebug,'Error '+IntToStr(EC)+' try Delete without Trailing Path Delimiter.') ;
          Result := DeleteToRecycleBin(WindowHandle, ExcludeTrailingPathDelimiter(Filename), Confirm) ;
        End ;
  End ;


Лог:
Код

  06-06-2013 22:21:33.890 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\bolts & blip\-langen-graphical\ to recycle bin with result 1026.
  06-06-2013 22:21:33.890 Error 1026 try Delete without Trailing Path Delimiter.
  06-06-2013 22:21:38.906 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\bolts & blip\-langen-graphical to recycle bin with result 5.
  06-06-2013 22:21:38.906 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\bolts & blip\-langen-posters\ to recycle bin with result 1026.
  06-06-2013 22:21:38.906 Error 1026 try Delete without Trailing Path Delimiter.
  06-06-2013 22:21:43.906 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\bolts & blip\-langen-posters to recycle bin with result 5.
  06-06-2013 22:21:43.921 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\falling skies\-langen-graphical\ to recycle bin with result 1026.
  06-06-2013 22:21:43.921 Error 1026 try Delete without Trailing Path Delimiter.
  06-06-2013 22:21:48.921 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\falling skies\-langen-graphical to recycle bin with result 5.
  06-06-2013 22:21:48.921 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\falling skies\-langen-posters\ to recycle bin with result 1026.
  06-06-2013 22:21:48.921 Error 1026 try Delete without Trailing Path Delimiter.
  06-06-2013 22:21:53.953 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\falling skies\-langen-posters to recycle bin with result 5.
  06-06-2013 22:21:53.953 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\svaty\-langen-posters\ to recycle bin with result 1026.
  06-06-2013 22:21:53.953 Error 1026 try Delete without Trailing Path Delimiter.
  06-06-2013 22:21:58.953 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\svaty\-langen-posters to recycle bin with result 5.

...

  06-06-2013 22:26:50.218 Delete C:\ProgramData\Team MediaPortal\MediaPortal\Thumbs\MPTVSeriesBanners\top gear\episodes\0x113.jpg to recycle bin with result 0.


Бьюсь уже третий день, ничего в голову не приходит, может есть идеи у кого?

Автор: northener 7.6.2013, 15:29
С "Trailing Path Delimiter" это не имя файла(папки), а путь. Поэтому и ошибка 1026 (файл не найден). А без него ошибка 5 (access denied).

Автор: ajs 7.6.2013, 15:32
Почему тогда файлы по тем же путям спокойно удаляются (последняя строка лога)? И в ручную без вопросов так же удаление проходит?

Автор: ajs 7.6.2013, 16:15
На 7-ке проверил, работает примерно так:
Код

  07-06-2013 16:14:26.577 Delete D:\Work\Programming\Delphi\MePoTools\thumbs\MPTVSeriesBanners\terra nova\-langen-graphica\ to recycle bin with result 0.
  07-06-2013 16:14:26.647 Delete D:\Work\Programming\Delphi\MePoTools\thumbs\MPTVSeriesBanners\terra nova new\ to recycle bin with result 124.
  07-06-2013 16:14:26.927 Delete D:\Work\Programming\Delphi\MePoTools\thumbs\MPTVSeriesBanners\terra nova new\-langen-graphical\ to recycle bin with result 0.
  07-06-2013 16:14:27.047 Delete D:\Work\Programming\Delphi\MePoTools\thumbs\MPTVSeriesBanners\terra nova new\-langen-posters\ to recycle bin with result 0.
  07-06-2013 16:14:28.068 Delete D:\Work\Programming\Delphi\MePoTools\thumbs\MPTVSeriesBanners\terra nova new\-langen-seasons\ to recycle bin with result 32.
  07-06-2013 16:14:28.125 Delete D:\Work\Programming\Delphi\MePoTools\thumbs\MPTVSeriesBanners\terra nova new\episodes\ to recycle bin with result 0.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)