Directory.GetFiles не забирает все файлы - PullRequest
23 голосов
/ 31 января 2020

У меня есть некоторый код, предназначенный для получения файлов в каталоге, который достаточно прост

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))

Говоря, получим любые файлы, которые содержат как итоги, так и .csv, с чем-нибудь после .csv.

Чего я не понимаю, так это того, почему он получил четыре верхних файла, а не нижние.

Я бы подумал, что ни один из файлов не будет найден оригинальный код?

1 Ответ

20 голосов
/ 31 января 2020

Очевидно, GetFiles придерживается логики сопоставления с образцом c, как это реализовано, скажем, в команде dir.

MSDN

Поскольку этот метод проверяет имена файлов как в формате имени файла 8.3, так и в формате длинного имени файла, шаблон поиска, подобный "*1*.txt", может возвращать неожиданные имена файлов. Например, использование шаблона поиска "*1*.txt" возвращает «longfilename.txt», поскольку эквивалентный формат имени файла 8.3 - «LONGFI ~ 1.TXT».

Поскольку @GSerg указал некоторые из ваших файлов иметь соответствующее имя 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

Попробуйте изменить шаблон на Totals.csv*, чтобы соответствовать всем файлам.

...