遍历目录及其子目录下面的某类型文件

网上一大把这种方法,可惜许多不能用。这个我试过了,可以。

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);

你可能感兴趣的:(文件)