function TForm1.DeletePath(mDirName: string): Boolean; { 返回删除指定目录是否成功 }
var
vSearchRec: TSearchRec;
vPathName: string;
K: Integer;
begin
Result := True;
vPathName := mDirName + '\*.*';
K := FindFirst(vPathName, faAnyFile, vSearchRec);
while K = 0 do
begin
if (vSearchRec.Attr and faDirectory > 0) and
(Pos(vSearchRec.Name, '..') = 0)
then begin
FileSetAttr(mDirName + '\' + vSearchRec.Name, faDirectory);
Result := DeletePath(mDirName + '\' + vSearchRec.Name);
end
else if Pos(vSearchRec.Name, '..') = 0
then begin //删除非目录属性的文件
FileSetAttr(mDirName + '\' + vSearchRec.Name, 0);
Result := DeleteFile(PChar(mDirName + '\' + vSearchRec.Name));
end;
if not Result then Break;
K := FindNext(vSearchRec);
end;
FindClose(vSearchRec);
Result := RemoveDir(mDirName);
end; { DeletePath }
这是删除指定文件夹的函数,运行没问题,用递归实现的,可是当进入下一级子目录的时候完成文件的操作后是怎么返回上一级目录的呢?代码没看懂,请点拨一下,
var
vSearchRec: TSearchRec;
vPathName: string;
K: Integer;
begin
Result := True;
vPathName := mDirName + '\*.*';
K := FindFirst(vPathName, faAnyFile, vSearchRec);
while K = 0 do
begin
if (vSearchRec.Attr and faDirectory > 0) and
(Pos(vSearchRec.Name, '..') = 0)
then begin
FileSetAttr(mDirName + '\' + vSearchRec.Name, faDirectory);
Result := DeletePath(mDirName + '\' + vSearchRec.Name);
end
else if Pos(vSearchRec.Name, '..') = 0
then begin //删除非目录属性的文件
FileSetAttr(mDirName + '\' + vSearchRec.Name, 0);
Result := DeleteFile(PChar(mDirName + '\' + vSearchRec.Name));
end;
if not Result then Break;
K := FindNext(vSearchRec);
end;
FindClose(vSearchRec);
Result := RemoveDir(mDirName);
end; { DeletePath }
这是删除指定文件夹的函数,运行没问题,用递归实现的,可是当进入下一级子目录的时候完成文件的操作后是怎么返回上一级目录的呢?代码没看懂,请点拨一下,
如果是文件就删除
否则递归调用
while K = 0 do
begin
//......循坏~~~至于递归的时候怎么保存堆栈恢复环境是系统的事情
Result := DeletePath(mDirName + '\' + vSearchRec.Name);
...
K := FindNext(vSearchRec);
end;
假如我指定的文件夹是c:\1 如果在这个文件夹下还有一个目录2,而且2下面没有文件夹了,那就删除c:\1\2\下的所有的文件了,删除完之后怎么返回到c:\1下的呢
var
j : integer;
begin
j := 1;
if i > 0 then j := j * n(i-1)
else Result := 1;
Result := j;
end;