delphi – 如何将多个文件扩展名传递给TDirectory.GetFiles?
发布时间:2020-12-15 04:01:18 所属栏目:大数据 来源:网络整理
导读:TDirectory.GetFiles有一个名为 SearchPattern 的参数.Embarcadero的文档说 The mask used when matching file names (for example,“*.exe” matches all the executable files). 但是,我想传递多种文件类型.我从FilterComboBox.Mask中获取这些类型.所以,它
TDirectory.GetFiles有一个名为
SearchPattern 的参数.Embarcadero的文档说
但是,我想传递多种文件类型.我从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每次调用时都会创建并销毁分配了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |