На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Удаление каталога вместе с вложенными подкаталогами
      ExpandedWrap disabled
        unit Unit1;
         
        interface
         
        uses
          Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
          Dialogs, StdCtrls, ShellAPI;
         
        type
          TForm1 = class(TForm)
            Button1: TButton;
            procedure Button1Click(Sender: TObject);
          end;
         
        var
          Form1: TForm1;
         
        implementation
         
        {$R *.dfm}
         
        procedure TForm1.Button1Click(Sender: TObject);
        var
          SH: SHFILEOPSTRUCT;
          Error: Integer;
        begin
          with SH do
          begin
            Wnd := Handle;
            wFunc := FO_DELETE;
            pFrom := 'c:\tmp'#0; // <<== это папка.   Список папок на удаление должен заканчиваться ДОПОЛНИТЕЛЬНЫМ нулевым символом
            pTo := nil;
            fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_SILENT;
            fAnyOperationsAborted := False;
            hNameMappings := nil;
            lpszProgressTitle := nil;
          end;
          Error := SHFileOperation(SH);
          if Error <> NO_ERROR then ShowMessage(SysErrorMessage(Error));
        end;
         
        end.


      Автор: Rouse_
        Более быстрый способ:
        ExpandedWrap disabled
          function DeleteDirWithSubdirs(const Path: string): Boolean;
          var
            I: Integer;
            F: TSearchRec;
            S: string;
          begin
            I := FindFirst(Path + '*.*', faAnyFile, F);
            try
              while I = 0 do
              begin
                if F.Name = '.' then
                begin
                  FindNext(F);
                  I := FindNext(F);
                  Continue;
                end;
                if F.Attr and faDirectory = faDirectory then
                begin
                  S := Path + F.Name + '\';
                  Result := DeleteDirWithSubdirs(S);
                end else begin
                  S := Path + F.Name;
                  {$IFDEF WINDOWS}
                  FileSetAttr(S, 0);
                  {$ENDIF}
                  Result := DeleteFile(S);
                end;
                if not Result then Break;
           
                I := FindNext(F);
              end;
            finally
              FindClose(F);
            end;
            {$I-}
            {$IFDEF WINDOWS}
            FileSetAttr(Path, 0);
            {$ENDIF}
            RmDir(Path);
            {$I+}
            Result := IOResult = 0;  
          end;

        Автор: s-mike
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0298 ]   [ 16 queries used ]   [ Generated: 14.05.24, 21:13 GMT ]