您的位置:首页 > 编程语言 > Delphi

Delphi删除指定文件夹及文件夹下所有子目录与文件

2018-03-13 09:17 1016 查看
懒了,自己记录以备后用,直接贴整个单元代码了。使用时调用 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: