Какой функцией в делфи удалять папку с файлами

  • Автор темы ROMBLLER
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

ROMBLLER

#1
Подскажыте функцию для удаления папки в которой есть другие папки и файлы, или подскажите как мождно удалить все файлы находящиеся в этой папке. спасибо!!!
 
V

Vagor.ini

#2
1 Вариант
Код:
function DeleteDir(Dir: string): boolean;
var
Found: integer;
SearchRec: TSearchRec;
begin
result := false;
if IOResult <> 0 then
 ChDir(Dir);
if IOResult <> 0 then
begin
 ShowMessage('Не могу войти в каталог: ' + Dir);
 exit;
end;
Found := FindFirst('*.*', faAnyFile, SearchRec);
while Found = 0 do
begin
 if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
  if (SearchRec.Attr and faDirectory) <> 0 then
  begin
   if not DeleteDir(SearchRec.name) then
    exit;
   end
   else
    if not DeleteFile(SearchRec.name) then
    begin
     ShowMessage('Не могу удалить файл: ' + SearchRec.name);
     exit;
    end;
   Found := FindNext(SearchRec);
  end;
FindClose(SearchRec);
ChDir('..');
RmDir(Dir);
result := IOResult = 0;
end;
2 Вариант
Для удаления каталогов существует функция RemoveDirectory. Она удаляет каталог, если он пуст. Поэтому перед удалением каталога его нужно очистить. Для этого здесь используется рекурентная функция RemoveAll.
Код:
uses
FileCtrl;

procedure RemoveAll(path: string);
var
sr: TSearchRec;
begin
if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then
begin
 repeat
  if sr.Attr and faDirectory = 0 then
  begin
   DeleteFile(path + '\' + sr.name);
  end
  else
  begin
   if pos('.', sr.name) <= 0 then
    RemoveAll(path + '\' + sr.name);
  end;
 until
  FindNext(sr) <> 0;
end;
FindClose(sr);
RemoveDirectory(PChar(path));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
dir: string;
begin
if SelectDirectory('Удаление каталога', '', dir) then
 RemoveAll(dir);
end;
 

admin

Well-known member
08.08.2003
2 754
0
#3
ROMBLLER
А ещё моя любимая. Через ShellApi

Код:
function DelDir(dir: string): Boolean; 
var 
fos: TSHFileOpStruct; 
begin 
ZeroMemory(@fos, SizeOf(fos)); 
with fos do 
begin 
 wFunc := FO_DELETE; 
 fFlags := FOF_SILENT or FOF_NOCONFIRMATION; 
 pFrom := PChar(dir + #0); 
end; 
Result := (0 = ShFileOperation(fos)); 
end;
Плюс метода в том, что удалением управляет shell windows и обработка ошибок лодится на него.
Тебе только надо вызывать ф-цию
Код:
if DelDir(dir: 'C:\command.com) then
...
else
...
Кстати удаляются и директории и файлы и полные и пустые. Отлично работает.
 
Статус
Закрыто для дальнейших ответов.