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

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

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

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

zedgraphsad
источник
1
Был ли данный файл удален, но открыт ли он антивирусом или аналогичным? Это может привести к «призрачному» файлу, в котором проводник все еще перечисляет его, но на самом деле его больше нет на диске.
Лассе В. Карлсен
6
По-видимому, первые четыре файла имеют имя 8.3, а последний - нет.
GSerg
1
Короткое имя - ваш заклятый враг, когда файлов слишком много, они Totals~n.csvбольше не подходят, и вы можете получить только совпадение Total*. Введите, dir /x tot*.*чтобы увидеть короткие имена. Вы поддерживаете Totals.csv*и, возможно, придется фильтровать, чтобы исключить случайные совпадения.
Ганс Пассант

Ответы:

20

Очевидно, GetFilesпридерживается логики сопоставления с образцом, как это реализовано, скажем, в 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* чтобы он соответствовал всем файлам.

user1859022
источник