Как удалить все файлы из папки в delphi?

Пользователь

от sherwood_littel , в категории: Другие , 3 года назад

Как удалить все файлы из папки в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

P

Пользователь

от Programmer , 3 года назад

@sherwood_littel !

Добрый день!

Для удаления всех файлов в папке можно сделать следующее

Для новых версий Delphi

1
TDirectory.Delete('Путь к папке', true);


для старых версий в рукопашную перебирать файлы в папке

1
2
3
4
5
6
7
8
9
var  FileName :TSearchRec;
       i :integer;
...

i := FindFirst('Путь к папке\*.*', faAnyFile, FileName);
if i = 0 then DeleteFile(FileName.Name);

while (FindNext(FileName) = 0)  do
    DeleteFile(FileName.Name);

Если же необходимо удалять файлы и во вложенных папках, то стоит использовать рекурсию.



Пользователь

от narciso , год назад

@sherwood_littel 

Можно использовать функцию RemoveDirectory из модуля Windows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
uses
  Windows;

procedure DeleteFilesFromFolder(const FolderPath: string);
var
  FindHandle: THandle;
  FindData: TWin32FindData;
begin
  // Находим первый файл в папке
  FindHandle := FindFirstFile(PChar(FolderPath + '*'), FindData);
  if FindHandle <> INVALID_HANDLE_VALUE then
  try
    repeat
      // Если это не папка, удаляем файл
      if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
        DeleteFile(PChar(FolderPath + '' + FindData.cFileName));
    until not FindNextFile(FindHandle, FindData);
  finally
    FindClose(FindHandle);
  end;
end;


Для удаления также всех вложенных папок и файлов можно использовать функцию RemoveDirectory из модуля Windows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure DeleteFolder(const FolderPath: string);
var
  FindHandle: THandle;
  FindData: TWin32FindData;
  ChildPath: string;
begin
  // Находим первый файл/папку в папке
  FindHandle := FindFirstFile(PChar(FolderPath + '*'), FindData);
  if FindHandle <> INVALID_HANDLE_VALUE then
  try
    repeat
      // Пропускаем папки "." и ".."
      if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
        if (FindData.cFileName <> '.') and (FindData.cFileName <> '..') then
        begin
          // Удаляем все файлы/папки в этой папке
          ChildPath := FolderPath + '' + FindData.cFileName;
          DeleteFolder(ChildPath);

          // Удаляем саму папку
          RemoveDirectory(PChar(ChildPath));
        end
      else
        // Удаляем файлы
        DeleteFile(PChar(FolderPath + '' + FindData.cFileName));
    until not FindNextFile(FindHandle, FindData);
  finally
    FindClose(FindHandle);
  end;
end;