测试条件:
测试电脑:笔记本,i78550u,8g内存,64位win10系统。
目标文件夹,4,757 个文件,745 个文件夹,79.5 MB。
================================================
第一种:
最简单,需要引用System.IOUtils单元,DEPHI2010之后的版本才有。
TDirectory.Delete('D:\web\', True);
第二种:
需要引用ShellAPI单元。
function DelDirectory(const Source: string): Boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_DELETE;
pFrom := PChar(Source + #0);
pTo := #0#0;
fFlags := FOF_NOCONFIRMATION + FOF_SILENT;
end;
Result := (SHFileOperation(fo) = 0);
end;
第三种:
function DelDirAll(aDir: string): Boolean;
var
vSearch: TSearchRec;
vRet: integer;
vKey: string;
begin
if aDir[Length(aDir)] <> '\' then
aDir := aDir + '\';
vKey := aDir + '*.*';
vRet := FindFirst(vKey, faanyfile, vSearch);
while vRet = 0 do
begin
if ((vSearch.Attr and fadirectory) = fadirectory) then
begin
if (vSearch.Name <> '.') and (vSearch.name <> '..') then
DelDirAll(aDir + vSearch.name);
end
else
begin
if ((vSearch.Attr and fadirectory) <> fadirectory) then
begin
SysUtils.DeleteFile(aDir + vSearch.name);
end;
end;
vRet := FindNext(vSearch);
end;
SysUtils.FindClose(vSearch);
Removedir(aDir); // 如果需要删除文件夹则添加
result := True;
end;
========================================================
测试结果:
第一种方法delphi自带的TDirectory.Delete删除速度最慢,每次大约需要二三十秒。
第二种方法快很多,每次大约需要5秒上下。
第三种最快,2到3秒左右。