Что такое синтаксис для установки нескольких файлов-расширений , как searchPattern
на Directory.GetFiles()
? Например, отфильтровывать файлы с расширениями .aspx и .ascx .
// TODO: Set the string 'searchPattern' to only get files with
// the extension '.aspx' and '.ascx'.
var filteredFiles = Directory.GetFiles(path, searchPattern);
Обновление : LINQ не является опцией , его необходимо searchPattern
передать GetFiles
, как указано в вопросе.
c#
.net
system.io.directory
Себ Нильссон
источник
источник
Ответы:
Я считаю, что не существует готового решения, это ограничение метода Directory.GetFiles.
Хотя написать собственный метод довольно легко, вот пример .
Код может быть:
источник
Редактировать 2014-07-23
Вы можете сделать это в .NET 4.5 для более быстрого перечисления:
Directory.EnumerateFiles в MSDN
источник
GetFiles
возвращаетсяstring[]
.Directory.EnumerateFiles
для повышения производительности ... stackoverflow.com/questions/5669617/…file.EndsWith("...", StringComparison.InvariantCultureIgnoreCase);
а неToLower
GetFiles может соответствовать только одному шаблону, но вы можете использовать Linq для вызова GetFiles с несколькими шаблонами:
Смотрите раздел комментариев здесь: http://www.codeproject.com/KB/aspnet/NET_DirectoryInfo.aspx
источник
new string[]{"*.txt","filename.*"}
. Тем не менее, вызовDistinct
фактически не решает эту проблему, поскольку объекты FileInfo сравниваются с использованием ссылочного равенства, а не семантического равенства. Это можно исправить, удаливDistinct
или передав егоIEqualityComparer<FileInfo>
. Отредактировано, чтобы сделать первое.SelectMany
будет повторять ту же файловую структуру снова (и снова), так что это может быть неоптимальным с точки зрения производительности.Мне нравится этот метод, потому что он читабелен и позволяет избежать нескольких итераций каталога:
источник
HashSet<string>
Боюсь, тебе придется сделать что-то подобное, я мутировал здесь .
источник
Directory.EnumerateFiles
для повышения производительности (В чем разница между Directory.EnumerateFiles и Directory.GetFiles? )Или это может быть быстрее разделить и объединить ваши шары (по крайней мере, это выглядит чище):
источник
Легко запоминающееся, ленивое и, возможно, несовершенное решение:
источник
Я бы использовал следующее:
РЕДАКТИРОВАТЬ: исправлено из-за несоответствия между Directory и DirectoryInfo
источник
Более эффективный способ получения файлов с расширениями ".aspx" и ".ascx", который позволяет избежать запросов файловой системы несколько раз и избежать возврата большого количества нежелательных файлов, состоит в предварительной фильтрации файлов с использованием приблизительного шаблона поиска и чтобы уточнить результат впоследствии:
источник
Я бы попробовал указать что-то вроде
он должен работать.
источник
источник
источник
Вместо функции EndsWith я бы выбрал
Path.GetExtension()
вместо этого метод. Вот полный пример:или:
(Используйте,
StringComparison.OrdinalIgnoreCase
если вы заботитесь о производительности: сравнение строк MSDN )источник
похож на это демо:
источник
Path.GetExtension
что вы можете использовать.@ Дэниел Б, спасибо за предложение написать мою собственную версию этой функции. Он имеет то же поведение, что и Directory.GetFiles, но поддерживает фильтрацию регулярных выражений.
Я нашел это полезным, поэтому я решил поделиться.
источник
c # версия ответа @ qfactor77. Это лучший способ без LINQ.
теперь возвращаем
filePath
строковый массив. В начале вам нужнотакже вам нужно добавить ссылку на
Microsoft.VisualBasic
источник
Я сделал простой способ для поиска столько расширений, сколько вам нужно, и без ToLower (), RegEx, foreach ...
Работаем на .Net Standard 2.0.
источник
Вы можете сделать это так
источник
источник
Просто хотел бы сказать, что если вы используете
FileIO.FileSystem.GetFiles
вместоDirectory.GetFiles
, это позволит массив подстановочных знаков.Например:
источник
FileIO
?