
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 และ SearchSystemFilesTDSFile เป็น TDSResultItem12/17/2020 (เวอร์ชัน 3.0)
ResultList ใหม่โดยใช้วัตถุ TDSFILE แบบกำหนดเองใหม่ หากคุณต้องการได้ผลลัพธ์ในรายการสตริงคุณสามารถใช้วิธีการใหม่ GetResultStringsIncludeHiddenFiles และ 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 เก่า ตอนนี้เรามีวิธีการใหม่ overloads TDirectory.GetFiles มีให้ที่ System.IOUtils Unit
แต่ถึงแม้จะใช้วิธีการ getFiles หากคุณต้องการพารามิเตอร์ขั้นสูงเช่นรวมถึงไดเรกทอรีย่อยคุณจะต้องทำซ้ำไดเรกทอรีทั้งหมด นอกจากนี้หากคุณต้องการระบุหน้ากากที่มีบางส่วนของสตริงพา ธ คุณจะต้องทำงานกับสตริงในรหัสของคุณทุกครั้งที่คุณต้องการทรัพยากรนี้
ดังนั้นฉันตัดสินใจที่จะสร้างส่วนประกอบนี้เพื่อเป็นวิธีที่ง่ายในการค้นหาไฟล์
รองรับ Delphi XE3..delphi 11
เพียงเติมคุณสมบัติที่ต้องการและวิธีการโทร Seek
จากนั้นคุณสามารถอ่าน ResultList สาธารณะเพื่อรับไฟล์ที่พบทั้งหมด รายการนี้มีวัตถุ TDSResultItem
Dir: String = Path to Search
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 = หากเปิดใช้งานมันจะสแกนไฟล์ในไดเรกทอรีย่อยทั้งหมดภายในเส้นทางการค้นหา (ค่าเริ่มต้นจริง)
UseMask: Boolean = หากเปิดใช้งานมันจะพิจารณาคุณสมบัติ Inclusions และ Exclusions หากปิดการใช้งานมันจะดึงไฟล์ทั้งหมดเสมอ (เปิดใช้งานเริ่มต้น)
IncludeHiddenFiles = หากเปิดใช้งานจะมีไฟล์และโฟลเดอร์ที่ซ่อนอยู่ (ทำงานบนแพลตฟอร์ม Windows เท่านั้น)
IncludeSystemFiles = หากเปิดใช้งานจะมีไฟล์ระบบและโฟลเดอร์ (ทำงานบนแพลตฟอร์ม Windows เท่านั้น)
เมื่อคุณเรียกใช้ไดเรกทอรีค้นหาผลลัพธ์จะถูกเรียกคืนในคุณสมบัติ ResultList ซึ่งมีวัตถุ TDSResultItem คุณสามารถวนรายการนี้เพื่อรับคุณสมบัติผลลัพธ์
BaseDir = เส้นทางไดเรกทอรีที่ใช้เมื่อเริ่มการค้นหา
RelativeDir = เส้นทางไดเรกทอรีที่ไม่มีคำนำหน้าไดเรกทอรีพื้นฐาน
Name = ส่วนชื่อไฟล์เท่านั้น
Size = ขนาดไฟล์เป็นไบต์
Attributes = แอตทริบิวต์ไฟล์ (เหมือนกับคุณสมบัติ tsearchRec.attr)
Timestamp = ไฟล์วันที่เขียนล่าสุดและเวลา
IsDir = หากรายการเป็นไดเรกทอรี (จะปรากฏขึ้นเฉพาะในกรณีที่คุณสมบัติ IncludeDirItem เป็นจริงเมื่อดำเนินการค้นหา)
หากคุณต้องการรับเฉพาะรายการสตริงพา ธ ไฟล์คุณสามารถใช้วิธีการ 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;