delphi �C 如何将多个文件扩展名传递给TDirectory.GetFiles?


本文整理自网络,侵删。

 
TDirectory.GetFiles有一个名为 SearchPattern的参数.Embarcadero的文档说
The mask used when matching file names (for example, “*.exe” matches all the executable files).

但是,我想传递多种文件类型.我从FilterComboBox.Mask中获取这些类型.所以,它是一个看起来像’* .txt; * .rtf; * .doc’的字符串.

我试图将该字符串直接传递给GetFiles,但它不起作用.我是否必须解析它,将其分解成碎片并将每个单独的部分提供给GetFiles?

GetFiles后面的RTL代码调用 Masks.MatchesMask来测试与搜索模式的匹配.此功能仅支持对单个掩码进行屏蔽.
另一种方法是使用允许TFilterPredicate的GetFiles重载.您提供了一个谓词,用于测试名称是否与您的模式匹配.

uses
  StrUtils, Types, Masks, IOUtils;

function MyGetFiles(const Path, Masks: string): TStringDynArray;
var
  MaskArray: TStringDynArray;
  Predicate: TDirectory.TFilterPredicate;
begin
  MaskArray := SplitString(Masks, ';');
  Predicate :=
    function(const Path: string; const SearchRec: TSearchRec): Boolean
    var
      Mask: string;
    begin
      for Mask in MaskArray do
        if MatchesMask(SearchRec.Name, Mask) then
          exit(True);
      exit(False);
    end;
  Result := TDirectory.GetFiles(Path, Predicate);
end;
请注意,MatchesMask每次调用时都会创建并销毁分配了TMask的堆.我可以想象,这是长时间搜索的性能瓶颈.在这种情况下,您可以从MaskArray创建一个TMask对象数组.并使用谓词中的那些进行测试.我不知道这是否是一个有效的关注,只是在我仔细阅读代码时发生的事情.

相关阅读 >>

Delphi 根据开始和结束符取得中间字符串

Delphi xe sha1

Delphi与进程、窗口句柄、文件属性、程序运行状态

Delphi xe ioutils tpath(结构体) 的方法与属性

Delphi tms web core 嵌入js代码

Delphi 捕捉异常 try except语句 和 try finally语句用法以及区别

Delphi 模糊查询和字段查询

Delphi 路径有空格调用批处理

Delphi cross socket的库

Delphi取得trichedit的光标当前位置

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...