如何列出一个文件夹中的所有文件?(200分)

  • 主题发起人 主题发起人 cfjjj
  • 开始时间 开始时间
C

cfjjj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何列出一个文件夹中的所有文件,并形成一个清单。<br>清单要求包括每个文件的完整路径、文件名、文件大小及文件属性。<br>注:文件夹中有子文件夹,要求子文件夹中的文件也要列出来。
 
定义:<br>&nbsp; SearchRec: TSearchRec;<br>然后,程序中,调用下面函数开始查找<br>&nbsp; FindFirst( 指定路径字串 + '*', faAnyFile, SearchRec);<br>得到文件信息存储在SearchRec中,里面的内容包含你想要的所有东西,名称、大小、属性等。<br>SearchRec.Name<br>SearchRec.Attr<br>SearchRec.Size<br>SearchRec.Time<br>等等。 更详细的,请请查一下帮助。<br><br>继续查找,用下面函数:<br>&nbsp; FindNext(SearchRec)<br>返回0说明还有文件。<br><br>子目录中的文件,需要你自己递归一下了。
 
从hubdog上粘过来的<br><br>代码如下:<br><br>1. 从搜索记录中判断是否是子目录。<br><br> <br><br>function IsValidDir(SearchRec:TSearchRec):Boolean;<br><br>begin<br><br><br>if (SearchRec.Attr=16) and<br><br>(SearchRec.Name&lt;&gt;'.') and<br><br>(SearchRec.Name&lt;&gt;'..') then<br><br>Result:=True<br><br>else<br><br>Result:=False;<br><br>end;<br><br>2. 这是查询主体函数。<br><br>参数介绍:<br><br>Mainpath: 指定的查询目录。<br><br>Filename: 欲查询的文件。<br><br>Foundresult: 返回的含完整路径的匹配文件(可能有多个)。<br><br>如果有匹配文件,函数返回True,否则,返回False;<br><br> <br><br>function SearchFile(mainpath:string;filename:string;<br><br>var foundresult:TStrings):Boolean;<br><br>var<br><br>i:integer;<br><br>Found:Boolean;<br><br>subdir1:TStrings;<br><br>searchRec:TsearchRec;<br><br>begin<br><br>found:=false;<br><br>if Trim(filename)&lt;&gt;'' then<br><br>begin<br><br>subdir1:=TStringList.Create;//字符串列表必须动态生成<br><br>//找出所有下级子目录。<br><br>if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then<br><br>begin<br><br>if IsValidDir(SearchRec) then<br><br>subdir1.Add(SearchRec.Name);<br><br>while (FindNext(SearchRec) = 0) do<br><br>begin<br><br>if IsValidDir(SearchRec) then<br><br>subdir1.Add(SearchRec.Name);<br><br>end;<br><br>end;<br><br>FindClose(SearchRec);<br><br>//查找当前目录。<br><br>if FileExists(mainpath+filename) then<br><br>begin<br><br>found:=true;<br><br>foundresult.Add(mainpath+filename);<br><br>end;<br><br>//这是递归部分,查找各子目录。<br><br>for i:=0 to subdir1.Count-1 do<br><br>found:=Searchfile(mainpath+subdir1.Strings+<br><br>'/',Filename,foundresult)or found;<br><br>//资源释放并返回结果。<br><br>subdir1.Free;<br><br>end;<br><br>result:=found;<br><br>end;<br><br>若要大小等属性 可以从TsearchRec中取得 <br><br><br>
 
查找一下历史<br>有答案的
 
递归调用即可。以伪代码说明如下:<br>procdure SearchFileInAllDir(DirName:String;FileName:String);<br>begin<br>&nbsp; SearchFileInDir(DirName,FileName); &nbsp;//在当前目录下查找<br>&nbsp; while FindSubDir(SubDirName) do &nbsp;//查找当前目录下的子目录<br>&nbsp; &nbsp; &nbsp;SearchFileInAllDir(SubDirName,FileName); &nbsp;//递归调用自己,<br>end;<br>在某一目录下查找文件、目录可由FindFirst和FindNext函数结合实现。<br>
 
《DELPHI4 技术内幕》上面好像有完整的例子!<br>
 
我已经解决了,各位的想法和建议都很不错,按劳分配了!
 
后退
顶部