GetFiles () - шаблон поиска
Я использую следующую строку для возврата файлов...
FileInfo file in nodeDirInfo.GetFiles("*.sbs", option)
но есть и другие файлы в папке с расширением ".sbsar", и он получает их тоже. Как я могу различать ".ГПС" и ".sbsar " в шаблоне поиска?
4 ответов
попробуйте это, отфильтрованный с помощью расширения файла.
FileInfo[] files = nodeDirInfo.GetFiles("*", SearchOption.TopDirectoryOnly).
Where(f=>f.Extension==".sbs").ToArray<FileInfo>();
проблема, которую вы испытываете, - это ограничение шаблона поиска в Win32 API.
searchPattern с расширением файла (например *.txt) в Ровно три символа возвращает файлы, имеющие расширение три или более символы, где первые три символа соответствуют расширению файла указывается в searchPattern.
мое решение-вручную отфильтровать результаты, используя Linq:
nodeDirInfo.GetFiles("*.sbs", option).Where(s => s.EndsWith(".sbs"),
StringComparison.InvariantCultureIgnoreCase));
это поведение Win32 API (FindFirstFile
), под GetFiles()
отражается на тебе.
вам нужно будет сделать свою собственную фильтрацию, если вы должны использовать GetFiles()
. Например:
GetFiles("*", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
или более эффективно:
EnumerateFiles("*", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
обратите внимание, что я использую StringComparison.InvariantCultureIgnoreCase
чтобы справиться с тем, что имена файлов Windows не учитывают регистр.
если производительность является проблемой, то есть если поиск по каталогам с большим количеством файлы, то более эффективно выполнять фильтрацию дважды: один раз в вызове GetFiles
или EnumerateFiles
, и один раз, чтобы очистить нежелательных имен файлов. Например:
GetFiles("*.sbs", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
EnumerateFiles("*.sbs", searchOption).Where(s => s.EndsWith(".sbs",
StringComparison.InvariantCultureIgnoreCase));
его упомянул в docs
при использовании подстановочного знака звездочки в searchPattern a searchPattern с расширением ровно три символа возвращает файлы, имеющие расширение из трех или более символов.Когда используя подстановочный знак вопросительного знака, этот метод возвращает только файлы, соответствующие указанному расширению файла.