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

Скажімо, отримуйте будь-які файли, що містять і Totals, і .csv, з будь-чим після .csv.

Чого я не отримую - це те, що він отримав чотири найкращі файли, але не найнижчий

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


1
Чи видалений відповідний файл, але він залишається відкритим антивірусом чи подібним? Це може призвести до файлу "привид", де дослідник все ще перелічує його, але він фактично не існує на диску.
— Лассе В. Карлсен

6
Мабуть, перші чотири файли мають 8,3 імені, а останній - ні.
— GSerg

1
Коротка назва - це ваш немед, коли файлів занадто багато, то вони Totals~n.csvбільше не підходять, і ви можете отримати лише збіг Total*. Введіть, dir /x tot*.*щоб побачити короткі імена. Ви віддаєте перевагу Totals.csv*і, можливо, доведеться фільтрувати, щоб усунути випадкові збіги.
— Ганс Пасант

Відповіді:


20

Мабуть, GetFilesдотримується логіки відповідності шаблону, оскільки вона реалізована в dirкоманді say .

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*він відповідав усім файлам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.