Получить файлы из каталога с шаблоном
Возможный дубликат:
Можете ли вы вызвать Directory.GetFiles() с несколькими фильтрами?
Можно ли получить за экс. .c
а также .h
файлы из каталога. Использование Directory.GetFiles("C:\", ".c;.h");
не работает. Это слишком плохо, чтобы призвать Directory.GetFiles(...);
дважды..:(
Благодарю.
6 ответов
Решение
Невозможно указать несколько фильтров в одном вызове метода GetFiles(). Вы можете найти альтернативы здесь
Если вы используете.NET 4.0, я бы пошел с Directory.EnumerateFiles
:
var files = from f in Directory.EnumerateFiles("C:\\")
where f.EndsWith(".c") || f.EndsWith(".h")
select f;
Для.Net 3.5.
public IEnumerable<string> GetFiles(
string basePath,
params string[] searchPatterns)
{
if (searchPatterns == null || searchPatterns.Length == 0)
{
return Directory.GetFiles(basePath);
}
return Enumerable.SelectMany(searchPatterns,
p => Directory.GetFiles(basePath, p));
}
Использование:
GetFiles(@"c:\", "*.c", "*.h");
Вы, вероятно, хотите добавить проверку
Вы можете попробовать что-то вроде этого:
var query = from p in Directory.GetFiles(@"C:\").AsEnumerable()
where p.Contains(".c")
|| p.Contains(".h")
select p;
См. Как получить файлы с несколькими расширениями, используя методы расширения.
Вот некоторые полезные вспомогательные функции для имитации наличия нескольких фильтров:
// .NET 4.0 friendly
public static IEnumerable<string> EnumerateFiles(string path, params string[] filters)
{
return filters.Length == 0
? Directory.EnumerateFiles(path)
: filters.SelectMany(filter => Directory.EnumerateFiles(path, filter));
}
// .NET 3.5 friendly
public static IEnumerable<string> GetFiles(string path, params string[] filters)
{
return filters.Length == 0
? Directory.GetFiles(path)
: filters.SelectMany(filter => Directory.GetFiles(path, filter));
}