一个查找文件的简单问题(100分)

  • 主题发起人 主题发起人 爱与和平
  • 开始时间 开始时间

爱与和平

Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个查找文件的的小过程如下:
procedure findfile(directory:string);
var
s:tsearchrec;
i:integer;
begin
i:=findfirst(directory+'/*.*',faAnyFile,s);
while i=0 do
begin
if s.name[1]<>'.' then
begin
if (s.attr and fadirectory)=fadirectory then
findfile(directory+'/'+s.name)
else
form1.ListBox1.Items.Add (directory+'/'+s.name);
end;
i:=findnext(s);
end;
end;
这个过程能列出所有文件(*.*)但当我把*.*改成*.txt后,
它只能列出根目录下的txt文件而不能列出子目录下包含的txt文件
为什么丫,各位大侠给小弟一个答案吧,谢谢
 
*.txt就不会嵌套查找目录了。
 
//同意楼上的说法,修改源代码如下:
procedure findfile(directory:string);
var
s:tsearchrec;
i:integer;
begin
i:=findfirst(directory+'/*.*',faAnyFile,s);
while i=0 do
begin
if s.name[1]<>'.' then
begin
if (s.attr and fadirectory)=fadirectory then
findfile(directory+'/'+s.name)
else
begin
if UpperCase(ExtractFileExt(s.name))='.TXT' then
form1.ListBox1.Items.Add (directory+'/'+s.name);
end;
end;
i:=findnext(s);
end;
end;
 
procedure Maketxt;
var
Sr: TSearchRec;
Err: Integer;
FilePath: string;

begin
Err:= FindFirst('*.txt',$37,Sr); //$37为除Volumn ID Files外的所有文件
// 如果找到文件
while (Err= 0) do
begin
if Sr.Name[1] <> '.' then
begin
//找到文件
if (Sr.Attr and faDirectory) = 0 then
begin
FilePath:= ExpandFileName(Sr.Name);
form1.listbox1.items.Add(Filepath);
end;

//找到子目录
if (Sr.Attr and faDirectory) = 16 then
begin
FilePath:= ExpandFileName(Sr.Name);
form1.listbox1.items.Add(FilePath);
ChDir(Sr.Name);
Maketxt;
ChDir('..');
end;
end;

//结束递归
Err := FindNext(Sr);
end;
end;

procedure button1click()
begin
form1.listbox1.items.Clear;
try
ChDir(edit1.Text);//里面是你要和查找的目录(可包含子目录)
except
showmessage('请点击树形目录查阅文件!');
end;
try
Maketxt;
except
showmessage('目录不对!');
end;
end;
 
谢谢各位
 
后退
顶部