Directory.GetFiles không nhận tất cả các tệp


23

Tôi có một số mã có nghĩa là để có được các tập tin trong một thư mục, đủ đơn giản

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

Các tập tin được đặt tên như sau:

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

Vấn đề của tôi là nó không chọn tập tin cuối cùng.

Tôi đã sửa mã bằng cách đặt mã này thay thế:

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

Nói nhận được bất kỳ tệp nào chứa cả Tổng và .csv, với bất kỳ thứ gì sau .csv.

Những gì tôi không nhận được là tại sao nó có bốn tệp hàng đầu, nhưng không phải là dưới cùng.

Tôi có nghĩ rằng không có tập tin nào được chọn bởi mã gốc không?


1
Tập tin trong câu hỏi đã bị xóa, nhưng vẫn được mở bằng chương trình chống vi-rút hoặc tương tự? Điều này có thể dẫn đến một tệp "ma" trong đó explorer vẫn liệt kê nó, nhưng nó không thực sự tồn tại trên đĩa nữa.
Lasse V. Karlsen

6
Rõ ràng bốn tệp đầu tiên có tên 8.3 và tệp cuối cùng thì không.
GSerg

1
Tên ngắn gọn là kẻ thù của bạn, khi có quá nhiều tệp thì Totals~n.csvkhông còn phù hợp và bạn chỉ có thể có được một trận đấu trên Total*. Nhập dir /x tot*.*để xem tên ngắn. Bạn ủng hộ Totals.csv*và có thể phải lọc để loại bỏ các trận đấu tình cờ.
Hans Passant

Câu trả lời:


20

Rõ ràng GetFilestuân thủ logic khớp mẫu khi nó được thực hiện trong dirlệnh say .

MSDN

Vì phương pháp này kiểm tra các tên tệp có cả định dạng tên tệp 8.3 và định dạng tên tệp dài, nên một mẫu tìm kiếm tương tự "*1*.txt"có thể trả về tên tệp không mong muốn. Ví dụ: sử dụng mẫu tìm kiếm "*1*.txt"trả về "longfilename.txt" vì định dạng tên tệp 8.3 tương đương là "LONGFI ~ 1.TXT".

Vì @GSerg đã chỉ ra một số tệp của bạn có tên 8.3 phù hợp.

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

Hãy thử thay đổi mẫu Totals.csv*để phù hợp với tất cả các tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.