Directory.GetFiles ไม่รับไฟล์ทั้งหมด


23

ฉันมีรหัสบางอย่างที่มีไว้เพื่อรับไฟล์ในไดเรกทอรีซึ่งง่ายพอ

foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv", SearchOption.TopDirectoryOnly))

ไฟล์ถูกตั้งชื่อดังนี้:

Totals.CSV142344
Totals.CSV142409
Totals.CSV142433
Totals.CSV142501
Totals.CSV142528

ปัญหาของฉันคือมันไม่ได้รับไฟล์สุดท้าย

ฉันได้แก้ไขรหัสโดยใส่สิ่งนี้แทน:

foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv*", SearchOption.TopDirectoryOnly))

การบอกรับไฟล์ใด ๆ ที่มีทั้ง Totals และ. csv, และทุกอย่างที่อยู่หลัง. csv

สิ่งที่ฉันไม่ได้คือทำไมมันถึงมีสี่อันดับแรก แต่ไม่ใช่ด้านล่าง

ฉันคิดว่าไม่มีไฟล์ใดที่จะถูกเลือกโดยรหัสดั้งเดิม?


1
ไฟล์ที่มีปัญหาถูกลบ แต่ถูกเปิดไว้โดยโปรแกรมป้องกันไวรัสหรือคล้ายกัน? สิ่งนี้อาจนำไปสู่ไฟล์ "โกสต์" ที่ซึ่ง explorer ยังคงอยู่ในรายการ แต่มันไม่มีอยู่ในดิสก์
Lasse V. Karlsen

6
เห็นได้ชัดว่าสี่ไฟล์แรกมีชื่อ 8.3และไฟล์ล่าสุดไม่มี
GSerg

1
ชื่อย่อคือกรรมตามสนองของคุณเมื่อมีไฟล์มากเกินไปแล้วTotals~n.csvไม่เหมาะอีกต่อไปและคุณจะได้รับการแข่งขันTotal*เท่านั้น พิมพ์dir /x tot*.*เพื่อดูชื่อย่อ คุณชอบTotals.csv*และอาจต้องกรองเพื่อกำจัดการแข่งขันโดยไม่ได้ตั้งใจ
Hans Passant

คำตอบ:


20

เห็นได้ชัดว่าเป็นGetFilesไปตามตรรกะการจับคู่รูปแบบตามที่นำมาใช้ในการพูดdirคำสั่ง

MSDN

เนื่องจากวิธีนี้ตรวจสอบกับชื่อไฟล์ที่มีทั้งรูปแบบชื่อไฟล์ 8.3 และรูปแบบชื่อไฟล์แบบยาวรูปแบบการค้นหาที่คล้ายกับ "*1*.txt"อาจส่งคืนชื่อไฟล์ที่ไม่คาดคิด ตัวอย่างเช่นการใช้รูปแบบการค้นหาของการ"*1*.txt"ส่งคืน "longfilename.txt" เนื่องจากรูปแบบชื่อไฟล์ 8.3 ที่เทียบเท่าคือ "LONGFI ~ 1.TXT"

@GSerg ชี้ให้เห็นว่าไฟล์บางไฟล์ของคุณมีชื่อตรงกัน

dir /x *Totals*.csv*

2020-01-31  09:33                 0 TOTALS~1.CSV Totals.CSV142344
2020-01-31  09:33                 0 TOTALS~2.CSV Totals.CSV142409
2020-01-31  09:33                 0 TOTALS~3.CSV Totals.CSV142433
2020-01-31  09:33                 0 TOTALS~4.CSV Totals.CSV142501
2020-01-31  09:33                 0 TO5404~1.CSV Totals.CSV142528

ลองเปลี่ยนรูปแบบเป็นเพื่อTotals.csv*ให้ตรงกับไฟล์ทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.