Directory.GetFiles nie pobiera wszystkich plików

23

Mam kod, który ma na celu uzyskanie plików w katalogu, co jest dość proste

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

Pliki mają następujące nazwy:

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

Mój problem polega na tym, że nie pobiera ostatniego pliku.

Naprawiłem kod, umieszczając to zamiast tego:

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

Mówiąc, otrzymaj wszystkie pliki, które zawierają zarówno Totals, jak i .csv, z dowolnymi plikami po .csv.

Nie rozumiem, dlaczego ma cztery najlepsze pliki, ale nie dolne.

Myślałem, że żaden z plików nie zostanie pobrany przez oryginalny kod?

zedgraphsad
źródło
1
Czy plik został usunięty, ale jest otwarty przez program antywirusowy lub podobny? Może to prowadzić do pliku „ducha”, w którym eksplorator nadal go wyświetla, ale tak naprawdę nie istnieje już na dysku.
Lasse V. Karlsen
6
Najwyraźniej pierwsze cztery pliki mają nazwę 8.3, a ostatni nie.
GSerg
1
Skrócona nazwa to twoja nemezis, gdy jest zbyt wiele plików, to Totals~n.csvjuż nie pasuje i możesz tylko dopasować Total*. Wpisz, dir /x tot*.*aby zobaczyć krótkie nazwy. Faworyzujesz Totals.csv*i być może będziesz musiał filtrować, aby wyeliminować przypadkowe mecze.
Hans Passant

Odpowiedzi:

20

Najwyraźniej GetFilesprzestrzega logiki dopasowywania wzorca, ponieważ jest implementowana w powiedzmy dirpoleceniu.

MSDN

Ponieważ ta metoda sprawdza nazwy plików zarówno w formacie nazwy pliku 8.3, jak i formacie długiej nazwy pliku, wzorzec wyszukiwania podobny do "*1*.txt"może zwrócić nieoczekiwane nazwy plików. Na przykład użycie wzorca wyszukiwania "*1*.txt"zwraca „longfilename.txt”, ponieważ równoważny format nazwy pliku 8.3 to „LONGFI ~ 1.TXT”.

Jak wskazał @GSerg, niektóre z twoich plików mają pasującą nazwę 8.3.

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

Spróbuj zmienić wzór, Totals.csv*aby dopasować wszystkie pliki.

użytkownik1859022
źródło