• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

ROMBLLER

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

Vagor.ini

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;
 
A

admin

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
...

Кстати удаляются и директории и файлы и полные и пустые. Отлично работает.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!