如何遍历一个目录下的所有子目录及各目录下的文件?(50分)

  • 主题发起人 主题发起人 Boat
  • 开始时间 开始时间
B

Boat

Unregistered / Unconfirmed
GUEST, unregistred user!
如何遍历一个目录下的所有子目录,并获得子目录及各目录下的文件?FindFirst() 中的第二个参数为 faDirectory 时,结合 FindNext() 进行搜索,为何找到的结果中却包含了文件。另外,FileSearch()的返回值不能正确显示结果。例如 FileSearch('*.txt','c:/windows;c:/my documents') 的返回值仍是含有通配符的文件名:“c:/windows/*.txt”,如何才能返回正确的结果呢?如返回: C:/windows/1.txt 类似的结果。
 
以往问题里有!
 
一个函数,结果用参数foundresult返回:
function SearchFile(mainpath:string;filename:string; var foundresult:TStrings):Boolean;
var
i:integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TsearchRec;
begin
if right(mainpath,1)<>'/' then mainpath:=mainpath+'/';
found:=false;
if Trim(filename)<>'' then
begin
subdir1:=TStringList.Create;
if (FindFirst(mainpath+'*.*', faDirectory,SearchRec)=0) then
begin
if IsValidDir(SearchRec) then subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
//查找当前目录。
if (FindFirst(mainpath+'*.*', faAnyFile-faDirectory, SearchRec)=0) then
begin
foundresult.Add(mainpath+SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
foundresult.Add(mainpath+SearchRec.Name);
end;
end;
FindClose(SearchRec);
for i:=0 to subdir1.Count-1 do
found:=Searchfile(mainpath+subdir1.Strings+
'/',Filename,foundresult)or found;
subdir1.Free;
end;
result:=found;
end;
 
我做了一个查找文件的程序(改进了的Searchp),使用了递归调用,你可以到
<a href="http://shrw.chn.net">delphi俱乐部</a>去下载.
 
用findfirst及其他函数。
 
这是我做的一个删除目录的程序,本身就是进行递归搜索,遍历文件应无问题。

procedure TMainForm.RMAny(AnyFile:String);
var//极度危险,删除目录
Found:integer;
SearchResult:TSearchRec;
begin
if FileGetAttr(AnyFile)<>faDirectory then
begin
DeleteFile(AnyFile);
exit;
end;
Found:=FindFirst(AnyFile+'/*.*',faAnyFile,SearchResult);
while Found=0 do
begin
if (SearchResult.Name<>'.')and(SearchResult.Name<>'..') then
RMAny(AnyFile+'/'+SearchResult.Name);
Found:=FindNext(SearchResult);
end;
if (SearchResult.Name<>'.')and(SearchResult.Name<>'..') then
FindClose(SearchResult);
RmDir(AnyFile);
end;
 
后退
顶部