
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;