1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

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

    ROMBLLER Гость

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

    Vagor.ini Гость

    Репутация:
    0
    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;
     
  3. admin

    admin Well-Known Member

    Репутация:
    0
    Регистрация:
    8 авг 2003
    Сообщения:
    2.754
    Симпатии:
    1
    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
    ...
    Кстати удаляются и директории и файлы и полные и пустые. Отлично работает.
     
Загрузка...
Статус темы:
Закрыта.

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