Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.69.96] |
|
Сообщ.
#1
,
|
|
|
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_ |
Сообщ.
#2
,
|
|
|
Более быстрый способ:
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 |