//想写个函数删除一个文件夹,递归删除文件中的文件,然后把文件夹remove掉,
//但是现在发现用了findfirst,findnext查找删除文件后,remove文件夹始终不成功。(文件夹已经为空了)
//不知道是什么原因。
function deldir(ADir:string;bLeaveADir:boolean=false;bLeaveAllDir:boolean=false):boolean;
var
sr:tsearchrec;
i:integer;
begin
result:=false;
if not directoryexists(ADir) then exit;
if ADir[length(ADir)]<>'\' then
ADir:=ADir+'\'; //********对一个文件夹下所有文件的操作***********
if findfirst(ADir+'*.*',faanyfile,sr)=0 then
begin
repeat
if sr.Attr and fadirectory =0 then //是文件
result:=deletefile(ADir+sr.Name)
else if (sr.Name<>'.') and (sr.Name<>'..') then //对本文件夹,上层文件夹不操作。
result:=deldir(ADir+sr.Name,bLeaveAllDir,bLeaveAllDir);
if (sr.Name<>'.') and (sr.Name<>'..') and (result=false) then exit;
until findnext(sr)<>0
end;
//***************************
if not bLeaveADir then
result:=removedir(ADir);
end;
//但是现在发现用了findfirst,findnext查找删除文件后,remove文件夹始终不成功。(文件夹已经为空了)
//不知道是什么原因。
function deldir(ADir:string;bLeaveADir:boolean=false;bLeaveAllDir:boolean=false):boolean;
var
sr:tsearchrec;
i:integer;
begin
result:=false;
if not directoryexists(ADir) then exit;
if ADir[length(ADir)]<>'\' then
ADir:=ADir+'\'; //********对一个文件夹下所有文件的操作***********
if findfirst(ADir+'*.*',faanyfile,sr)=0 then
begin
repeat
if sr.Attr and fadirectory =0 then //是文件
result:=deletefile(ADir+sr.Name)
else if (sr.Name<>'.') and (sr.Name<>'..') then //对本文件夹,上层文件夹不操作。
result:=deldir(ADir+sr.Name,bLeaveAllDir,bLeaveAllDir);
if (sr.Name<>'.') and (sr.Name<>'..') and (result=false) then exit;
until findnext(sr)<>0
end;
//***************************
if not bLeaveADir then
result:=removedir(ADir);
end;
var
T:TSHFileOpStruct;
P:String;
begin
P:=edtPath.Text;
with T do
begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
fFlags:=FOF_ALLOWUNDO
end;
if SHFileOperation(T)=0 then
ShowMessage('删除成功')
else
ShowMessage('删除失败');
end;删除文件或文件夹到回收站。
FileStruct : SHFILEOPSTRUCT; FileStruct.Wnd := Handle;
FileStruct.wFunc := FO_DELETE;
FileStruct.pFrom := pChar(sPath); //文件夹
FileStruct.pTo := ''; //pChar(InstallPath);
FileStruct.fFlags := FOF_NOCONFIRMATION;
FileStruct.fAnyOperationsAborted := False;
FileStruct.hNameMappings := nil;
FileStruct.lpszProgressTitle := '';
SHFileOperation(FileStruct);
添加一个edit,一个button,你试试,为什么要那么麻烦呢。
这个根据fflags的值不同,有不同的操作。
ADir:=ADir+'\'; //删文件夹时,不要追加"\"
...................................
...................................
...................................
if not bLeaveADir then
result:=removedir(ADir);
end;
嗯,用了findclose后确实可以了