
09/12/2021(版本3.5)
03/13/2021(版本3.4)
02/01/2021(版本3.3)
12/18/2020(版本3.2)
12/17/2020(版本3.1)
IncludeDirItem属性。IncludeHiddenFiles和IncludeSystemFiles到SearchHiddenFiles和SearchSystemFiles 。TDSFile更改为TDSResultItem 。12/17/2020(版本3.0)
ResultList 。如果您想在字符串列表中获取结果,则可以使用新方法GetResultStrings 。IncludeHiddenFiles和IncludeSystemFiles属性。11/22/2020(2.0版)
Inclusions和Exclusions属性。10/31/2020(1.3版)
10/27/2020(版本1.2)
10/26/2020(版本1.1)
05/03/2020
当使用Delphi并处理文件和目录时,最终您需要在目录中搜索并获取文件列表,甚至在子目录中搜索文件。
使用旧的FindFirst和FindNext函数,这可能有些困难。现在,我们已经有了新方法过载TDirectory.GetFiles ,可在System.IOUtils单元上获得。
但是,即使使用getfiles方法,如果您需要一些高级参数(例如包括子目录),则需要迭代所有目录。另外,如果要指定包含路径字符串某个部分的掩码,则每次需要此资源时都需要使用代码中的字符串。
因此,我决定构建此组件,成为搜索文件的简便方法。
支持delphi xe3..delphi 11
只需填写所需的属性并Seek呼叫方法。
然后,您可以阅读公共属性ResultList以获取所有找到的文件。此列表包含TDSResultItem对象。
Dir: String =搜索路径
Inclusions: TStrings =如果指定了任何行,则该组件将仅根据下述的掩码语法搜索此处指定的掩码。
Exclusions: TStrings =在包含在Inclusions后立即进行检查,如果文件匹配Exclusions掩码(根据下面描述的掩码语法),则将其排除在搜索之外。
面具语法:
*.txt
myapp.exe
*xyz*.doc
myfile?.rtf
*sub_path*
first_path*
path1path2file.avi
<F>*abc*
如果将字符串
<F>与掩码一起使用,则仅将其视为路径的文件名部分。当可以将掩码与目录部分混淆时,这很有用。
示例:假设有一个路径C: myApp。在此文件夹中,还有另一个文件夹C: myapp subfolder。在最后一个文件夹中,有一个名为my_app_file.txt的文件。
因此,如果我们需要排除包含文本“应用程序”的所有文件,则可以在Masks属性中指定: *app* 。但是在这种情况下,该文件夹也将被排除在外,因为它们与表达式*app*匹配,并且假设我们要包含此目录,因为还有另一个具有其他不同名称的文件。在这种情况下,我们可以使用<F>*app* 。当组件检查掩码时,这仅考虑文件名部分。
这些属性取决于启用USEmask属性。
Sorted: Boolean =如果启用了,它将检索目录和文件按字母顺序排序。 (默认错误)
SubDir: Boolean =如果启用,它将在搜索路径内的所有子目录中扫描文件。 (默认为true)
UseMask: Boolean =启用,它将考虑Inclusions和Exclusions属性。如果禁用,它将始终检索所有文件。 (默认启用)。
IncludeHiddenFiles =如果启用了,它将包含隐藏的文件和文件夹(仅在Windows平台上工作)。
IncludeSystemFiles =如果启用了,它将包括系统文件和文件夹(仅在Windows平台上工作)。
当您运行目录搜索时,将在包含TDSResultItem对象的ResultList属性中检索结果。您可以迭代此列表以获取结果属性。
BaseDir搜索时使用的目录路径。
RelativeDir =无基本目录前缀的目录路径。
Name =仅文件名零件。
Size =字节中的文件大小。
Attributes =文件属性(与tsearchRec.attr属性相同)。
Timestamp =文件最后写日期和时间。
IsDir =如果项目是目录(仅当执行搜索时属于IncludeDirItem属性为TRUE时出现)。
如果您只想获取文件路径字符串列表,则可以使用方法GetResultStrings :
procedure GetResultStrings (S: TStrings; Kind: TDSResultKind); Kind代表的地方:
// Returns bytes in megabytes string format, with two decimal places.
function BytesToMB (X: Int64): string;
// Returns file size in bytes.
function GetFileSize ( const aFileName: string): Int64;
// Returns if an attribute enumerator contains a specific attribute (use System.SysUtils consts: faReadOnly, faHidden, faDirectory...)
function ContainsAttribute (AttributesEnum, Attribute : Integer): Boolean;