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

Тема в разделе "Delphi - FAQ", создана пользователем ROMBLLER, 16 янв 2004.

Статус темы:
Закрыта.
  1. ROMBLLER

    ROMBLLER Гость

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

    Vagor.ini Гость

    1 Вариант
    Код (Text):
    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.
    Код (Text):
    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;
     
  3. admin

    admin Well-Known Member

    Регистрация:
    8 авг 2003
    Сообщения:
    2.811
    Симпатии:
    0
    ROMBLLER
    А ещё моя любимая. Через ShellApi

    Код (Text):
    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 и обработка ошибок лодится на него.
    Тебе только надо вызывать ф-цию
    Код (Text):
    if DelDir(dir: 'C:\command.com) then
    ...
    else
    ...
    Кстати удаляются и директории и файлы и полные и пустые. Отлично работает.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей