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 с расширением ровно три символа возвращает файлы, имеющие расширение из трех или более символов.Когда используя подстановочный знак вопросительного знака, этот метод возвращает только файлы, соответствующие указанному расширению файла.