懒了,自己记录以备后用,直接贴整个单元代码了。使用时调用 DeleteDir函数传入需要删除的文件夹路径就行了。
unit ZipUtil;
interface
uses
SysUtils, Classes, VCLZip, VCLUnZip, Dialogs, ActiveX;
//删除目录和目录下得所有文件和文件夹
procedure DeleteDir(sDirectory: WideString);
//获取子目录所有文件夹
function GetAllSubDir(Directory: WideString; var RetList: TStringList): Boolean;
//获取子目录所有文件
function GetAllDirFile(Directory: WideString; var RetList: TStringList): Boolean;
implementation
procedure DeleteDir(sDirectory: WideString);
var
sr: TSearchRec;
sPath, sFile: WideString;
begin
//检查目录名后面是否有 '\'
if Copy(sDirectory,Length(sDirectory),1) <> '\' then
sPath := sDirectory + '\'
else
sPath := sDirectory;
if FindFirst(sPath+'*.*',faAnyFile, sr) = 0 then
begin
repeat
sFile:=Trim(sr.Name);
if sFile='.' then Continue;
if sFile='..' then Continue;
sFile:=sPath+sr.Name;
if (sr.Attr and faDirectory)<>0 then
DeleteDir(sFile)
else if (sr.Attr and faAnyFile) = sr.Attr then
DeleteFile(sFile); //删除文件
until FindNext(sr) <> 0;
FindClose(sr);
end;
RemoveDir(sPath);
end;
function GetAllSubDir(Directory: WideString; var RetList: TStringList): Boolean;
var
SearchRec: TSearchRec;
sTemp: WideString;
function IsSubDir(SearchRec: TSearchRec): Boolean;
begin
if (SearchRec.Attr = faDirectory) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
Result := True
else
Result := False;
end;
begin
if FindFirst(Directory + '*.*', faAnyFile, SearchRec) = 0 then
begin
repeat //循环直到Until为真
if IsSubDir(SearchRec) then
begin
sTemp := Directory + SearchRec.Name + '\';
RetList.Add(sTemp);
//GetAllSubDir(sTemp, RetList); //这是递归部分,查找各子目录。
end;
until (FindNext(SearchRec) <> 0);
FindClose(SearchRec);
end;
FindClose(SearchRec);
Result := True;
end;
function GetAllDirFile(Directory: WideString; var RetList: TStringList): Boolean;
var
i: Integer;
DirList: TStringList;
SearchRec: TSearchRec;
begin
Result := False;
DirList := TStringList.Create;
DirList.Add(Directory + '\');
//获取所有子目录
//if not GetAllSubDir(Directory + '\', DirList) then exit;
for i := 0 to DirList.Count - 1 do
begin
if FindFirst(DirList.Strings[i] + '*.*', faAnyFile, SearchRec) = 0 then
begin
repeat
if SearchRec.Attr <> faDirectory then
RetList.Add(DirList.Strings[i] + SearchRec.Name);
until (FindNext(SearchRec) <> 0);
end;
FindClose(SearchRec);
end;
if DirList.Count <= 0 then
RetList.Add(Directory);
DirList.Free;
Result := True;
end;
end.