如何遍历一个文件夹下的所有文件和子文件夹 ( 积分: 50 )

  • 主题发起人 主题发起人 yyacc
  • 开始时间 开始时间
Y

yyacc

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.datzh(const path: string);
var j: word;
aa:TsearchRec;
s:string;
i:integer;
begin
j:=FindFirst(Path+'/*.*',faAnyFile,aa);
while j=0 do
Begin
if (aa.name<>'.') and (aa.name<>'..') then
begin
if DirectoryExists(Path+'/'+aa.Name) then
begin
list1.Directory:=Path+'/'+aa.Name;
list1.Mask:='*.dat';
for i:=0 to list1.Items.Count-1 do
begin
................
end;
end;
datzh(Path+'/'+aa.Name);
end;
j:=FindNext(aa);
End;
findclose(aa);

end;
我想实现的功能是遍历某个文件夹,对其扩展名一样的进行处理。
上面这个只能处理一个文件夹下的子文件夹,和其同目录的文件都不能处理到。我知道还有个FileExists,但是我试了下必须要把这些文件都循环一边才行,这样太浪费时间,而且我也不需要它把所有文件都循环一边,只要判断出一个文件名我找到对应的目录就可以了。怎么实现呢。
 
Path+'/*.*' 下面的文件应该都能找到吧.
你想要同级的? 是不是 Path 写的有问题?
Path = C:/windows/*.*
你想要得到 C:/windows/*.* 里的内容?
改Path 的内容就行了吧?
 
我以前写的可文件查找代码
uses masks;


function FindFiles( const Dir,
FileName: string; const FileAttrs: integer): integer;
var
miFileAttrs,FileCount:integer;
SrcDir:string;
sr: TSearchRec;
i:integer;
begin
Result:= 0 ;
//路径字符串检查
if Length(Dir) = 0 then
begin
result := 0;
Exit;
end;

//删除路径后的 "/"
SrcDir:= Dir;
while SrcDir[Length(SrcDir)]= '/' do
begin
SrcDir:= copy(SrcDir,1,Length(SrcDir)-1);
end;


if FindFirst(SrcDir + '/*' , FileAttrs, sr) = 0 then
begin
repeat
if (sr.Attr and faDirectory) =faDirectory then
begin
//子目录
if (sr.Name <>'..') and(sr.Name <>'.')then
Result := Result + FindFiles(FileList,SrcDir+'/' + sr.Name,FileName,FileAttrs);
end else
begin
//文件
if Masks.MatchesMask(sr.Name,FileName) then
begin
//处理匹配的文件
{i:=FileList.Add(sr);
FileList.Patch := SrcDir+'/';
inc(Result);}
end;
end;
//if Terminated then break; //中断查找
until FindNext(sr) <> 0;
FindClose(sr);
end;

end;
 
呵呵,一开始是我自己没转过弯来,其实这是个很简单的问题,是我把它复杂化了。不过谢谢楼上二位的回答。分照给。[:)]
 
多人接受答案了。
 
后退
顶部