Привет, вы можете использовать это, которое я нашел в качестве контента сообщества на http://msdn.microsoft.com/en-us/library/wz42302f.aspx.:
private static string[] GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}
альтернатива, которая использует ленивый анализ (только .Net 4.0):
private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}
Выможно использовать как GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png")
.По сути, это просто поиск для каждого фильтра, поэтому он не настолько эффективен, насколько это возможно.
Окончательная версия (только .Net 4.0, но может быть сделана дляРешение 2.0, по крайней мере):
private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
let extension = Path.GetExtension(file)
where extension == ".jpg" || extension == ".gif" || extension == ".png"
select file;
}
Я считаю, что последнее является самым быстрым, потому что оно повторяется только один раз.Но это зависит от того, как поиск по шаблону реализован в Directory
и как ищет ОС.Нужен тест производительности, которого я еще не делал.