下面代码可以递归找出指定目录下所有子目录中的所有文件,我想实现只递归一层,如何修改呢?(5分)

  • 主题发起人 lkdbdlkq
  • 开始时间
L

lkdbdlkq

Unregistered / Unconfirmed
GUEST, unregistred user!
fr:=FindFirst(Path,faAnyFile,sr);
while fr=0 do
begin
if (sr.Attr=faDirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
FindAll(path+sr.Name)
else
begin
showmessage(sr.name);
end;
fr:=FindNext(sr);
end;
FindClose(sr);

比如说,目录结构为d:/a/b/c/d/ 现在我选定path 为d:/a/ 那么函数将查找d:/a/ 及 d:/a/b/下的所有文件,对c 及 d 两个更深的子目录则不查找,如何实现呢?
 
procedure GetFiles(const psDir :string;const piLevel:integer);
var
Sr: TSearchRec;
begin
// 递归调用,得到目录及子目录的文件
if FindFirst(psDir +'/*.*', faAnyFile, Sr) <> 0 then
Exit;
repeat
if Sr.Attr and faDirectory = faDirectory then
begin
if (Sr.Name <> '.') and (Sr.Name <> '..') then
begin
// 子目录的层数小于等于1才递归
if piLevel<=1 then
begin
GetFiles(psDir + '/' + Sr.Name,piLevel+1);
end;
end;
end
else
begin
// 处理当前目录下的文件
// ....
end;
until FindNext(Sr) <> 0 ;
end;

调用 :GetFiles('c:/a',0);
 
接受答案了.
 

Similar threads

I
回复
0
查看
515
import
I
I
回复
0
查看
585
import
I
I
回复
0
查看
870
import
I
I
回复
0
查看
575
import
I
顶部