飞
飞来石
Unregistered / Unconfirmed
GUEST, unregistred user!
算法如下
procedure SearchFile(path:string);
var
SearchRec:TSearchRec;
found:integer;
begin
found:=FindFirst(path+'*.*', faAnyFile, SearchRec);
while found=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.name<>'..') and (SearchRec.Attr =faDirectory) then
begin
Form1.Memo1.Lines.Add(path+SearchRec.Name);
SearchFile(path+SearchRec.Name+'/');
end
else
if (SearchRec.Name<>'.') and (SearchRec.name<>'..') then
Form1.Memo1.Lines.Add(path+SearchRec.Name);
found:=FindNext(SearchREc);
end;
FindClose(SearchRec);
end;
比如我搜索C:/Test目录, 目录下有3个文件: A.exe, B.exe, Z.exe还有一个文件夹Next, Nest文件夹下有一个文件C.exe
搜索出来的结果, 当然是
C:/test/a.exe
C:/test/b.exe
C:/test/Nest
C:/test/Next/C.exe
C:/test/Z.exe
由于是按照字母顺序搜索, 前面搜索到a.exe和b.exe时候都还没有产生递归调用, 但是搜索到目录Next之后, 函数会递归, 进入C:/test/Next并搜索其下的内容.
那么现在问题出来了, 函数是怎么又回到上层的C:/test/的呢?添加完Next目录下的内容, 是执行的found:=FindNext(SearchREc);由于FindFirst已经指向了C:/test/Next, 那么又是如何回到上层去的呢?
procedure SearchFile(path:string);
var
SearchRec:TSearchRec;
found:integer;
begin
found:=FindFirst(path+'*.*', faAnyFile, SearchRec);
while found=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.name<>'..') and (SearchRec.Attr =faDirectory) then
begin
Form1.Memo1.Lines.Add(path+SearchRec.Name);
SearchFile(path+SearchRec.Name+'/');
end
else
if (SearchRec.Name<>'.') and (SearchRec.name<>'..') then
Form1.Memo1.Lines.Add(path+SearchRec.Name);
found:=FindNext(SearchREc);
end;
FindClose(SearchRec);
end;
比如我搜索C:/Test目录, 目录下有3个文件: A.exe, B.exe, Z.exe还有一个文件夹Next, Nest文件夹下有一个文件C.exe
搜索出来的结果, 当然是
C:/test/a.exe
C:/test/b.exe
C:/test/Nest
C:/test/Next/C.exe
C:/test/Z.exe
由于是按照字母顺序搜索, 前面搜索到a.exe和b.exe时候都还没有产生递归调用, 但是搜索到目录Next之后, 函数会递归, 进入C:/test/Next并搜索其下的内容.
那么现在问题出来了, 函数是怎么又回到上层的C:/test/的呢?添加完Next目录下的内容, 是执行的found:=FindNext(SearchREc);由于FindFirst已经指向了C:/test/Next, 那么又是如何回到上层去的呢?