功能:递归算法实现DOS命令deltree的功能出现问题如下:
被删除的目录下文件以及子目录的文件可以被删除,可子文件夹不能删除,哪位高手可以教我哪里错了
代码如下:
Button1Click为开始删除按钮procedure TForm1.Button1Click(Sender: TObject);
begin
//删除d:\bb\文件夹下的所有内容
deltree('d:\bb\');
end ;function tform1.deltree(path:string):boolean;
var
SearchRec: TSearchRec;
olddir: string;
i:integer;
begin
//判断目录是否存在
if DirectoryExists(path) then
begin
//进入该目录,删除其中的子目录和文件
oldDir := GetCurrentDir;
ChDir(path);
//查找目录中所有任何文件
FindFirst('*.*', faAnyFile, SearchRec); repeat
//修改文件属性为普通属性值
FileSetAttr(SearchRec.Name,0);
//如果是目录并且不是.和..则递归调用DelTree
if(SearchRec.Attr and faDirectory > 0) then
begin
if(SearchRec.Name[1]<> '.') then
if(not Deltree(SearchRec.Name)) then
break;
end
else
//如果是文件直接删除
if(not DeleteFile(SearchRec.Name))then
break ;
//继续查找,直到最后
until (FindNext(SearchRec)<> 0) ; //回到父目录,删除该目录
chdir('..');
showmessage(getcurrentdir);
showmessage(path);
result:=removedir(path);
SetCurrentDir(oldDir);
end
else
Result := False ;
end ;
被删除的目录下文件以及子目录的文件可以被删除,可子文件夹不能删除,哪位高手可以教我哪里错了
代码如下:
Button1Click为开始删除按钮procedure TForm1.Button1Click(Sender: TObject);
begin
//删除d:\bb\文件夹下的所有内容
deltree('d:\bb\');
end ;function tform1.deltree(path:string):boolean;
var
SearchRec: TSearchRec;
olddir: string;
i:integer;
begin
//判断目录是否存在
if DirectoryExists(path) then
begin
//进入该目录,删除其中的子目录和文件
oldDir := GetCurrentDir;
ChDir(path);
//查找目录中所有任何文件
FindFirst('*.*', faAnyFile, SearchRec); repeat
//修改文件属性为普通属性值
FileSetAttr(SearchRec.Name,0);
//如果是目录并且不是.和..则递归调用DelTree
if(SearchRec.Attr and faDirectory > 0) then
begin
if(SearchRec.Name[1]<> '.') then
if(not Deltree(SearchRec.Name)) then
break;
end
else
//如果是文件直接删除
if(not DeleteFile(SearchRec.Name))then
break ;
//继续查找,直到最后
until (FindNext(SearchRec)<> 0) ; //回到父目录,删除该目录
chdir('..');
showmessage(getcurrentdir);
showmessage(path);
result:=removedir(path);
SetCurrentDir(oldDir);
end
else
Result := False ;
end ;
procedure tform1.deltree(path:string);
var
MyResult: integer;
NewPath: string;
FSearchRec, DSearchRec: TSearchRec;
begin
//判断目录是否存在
if DirectoryExists(path) then
begin
NewPath := Path;
MyResult := FindFirst(Path+'\*.*', faAnyfile, FsearchRec);
while MyResult = 0 do
begin
if (FSearchRec.Name <> '.') and (FSearchRec.Name <> '..') then
begin
listbox1.Items.Add(FSearchRec.Name);
DeleteFile(Path+'\'+FSearchRec.Name);
end;
MyResult := FindNext(FSearchRec);
end; MyResult := findFirst(path+'\*.*', faDirectory, DSearchRec);
while MyResult = 0 do
begin
if (DSearchRec.Name <> '.') and (DSearchRec.Name<> '..') then
begin
NewPath := Path;
path := path + '\'+DSearchRec.Name;
Deltree(Path);
end;
path := NewPath;
MyResult := FindNext(DSearchRec);
end;
end;
end;
FindClose(SearchRec);