遍历目录及其子目录下面的某类型文件
网上一大把这种方法,可惜许多不能用。这个我试过了,可以。
USES Masks
procedure GetFileListEx(FilePath, ExtMask: string; FileList: TStrings; SubDirectory: Boolean = True); //遍?目?及子目?
function Match(FileName: string; MaskList: TStrings): boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to MaskList.Count - 1 do
begin
if MatchesMask(FileName, MaskList[i]) then
begin
Result := True;
break;
end;
end;
end;
var
FileRec: TSearchrec;
MaskList: TStringList;
begin
if DirectoryExists(FilePath) then
begin
if FilePath[Length(FilePath)] <> '/' then FilePath := FilePath + '/';
if FindFirst(FilePath + '*.*', faAnyfile, FileRec) = 0 then
begin
MaskList := TStringList.Create;
try
ExtractStrings([';'], [], PChar(ExtMask), MaskList);
FileList.BeginUpdate;
repeat
if ((FileRec.Attr and faDirectory) <> 0) and SubDirectory then
begin
if (FileRec.Name <> '.') and (FileRec.Name <> '..') then
GetFileListEx(FilePath + FileRec.Name + '/', ExtMask, FileList);
end
else
begin
if Match(FilePath + FileRec.Name, MaskList) then
FileList.Add(FilePath + FileRec.Name);
end;
until FindNext(FileRec) <> 0;
FileList.EndUpdate;
finally
MaskList.Free;
end;
end;
FindClose(FileRec);
end;
end;
调用演示
GetFileListEx(Edit1.Text,'*.pas;*.inc',pasFileList,true);
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/archive/2011/05/18/2940605.html