Directory.GetFiles tidak mengambil semua file

23

Saya memiliki beberapa kode yang dimaksudkan untuk mendapatkan file di direktori, yang cukup sederhana

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

File-file tersebut dinamai sebagai berikut:

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

Masalah saya adalah tidak mengambil file terakhir.

Saya telah memperbaiki kode dengan meletakkan ini sebagai gantinya:

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

Mengatakan dapatkan semua file yang berisi Totals dan .csv, dengan apa pun setelah .csv.

Yang tidak saya dapatkan adalah mengapa ia mendapat empat file teratas, tetapi bukan yang paling bawah.

Saya pikir tidak ada file yang akan diambil oleh kode asli?

zedgraphsad
sumber
1
Apakah file tersebut telah dihapus, tetapi tetap dibuka oleh antivirus atau serupa? Ini mungkin mengarah ke file "ghost" di mana explorer masih mencantumkannya, tetapi sebenarnya tidak ada pada disk lagi.
Lasse V. Karlsen
6
Rupanya empat file pertama memiliki nama 8,3 dan yang terakhir tidak.
GSerg
1
Nama pendek adalah musuh Anda, ketika ada terlalu banyak file maka Totals~n.csvtidak lagi cocok dan Anda hanya bisa mendapatkan kecocokan Total*. Ketik dir /x tot*.*untuk melihat nama pendek. Anda mendukung Totals.csv*dan mungkin harus memfilter untuk menghilangkan kecocokan yang tidak disengaja.
Hans Passant

Jawaban:

20

Rupanya GetFilesmengikuti logika pencocokan pola seperti yang diterapkan di katakan dirperintah.

MSDN

Karena metode ini memeriksa terhadap nama file dengan format nama file 8,3 dan format nama file panjang, pola pencarian yang mirip dengan "*1*.txt"dapat mengembalikan nama file yang tidak terduga. Misalnya, menggunakan pola pencarian "*1*.txt"pengembalian "longfilename.txt" karena format nama file 8,3 yang setara adalah "LONGFI ~ 1.TXT".

Ketika @GSerg menunjuk beberapa file Anda memiliki nama 8.3 yang cocok.

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

Coba ubah pola Totals.csv*untuk mencocokkan semua file.

pengguna1859022
sumber