Obtener archivos del directorio con patrón

Posible duplicado:
¿Se puede llamar a Directory.GetFiles () con múltiples filtros?

¿Es posible obtener por ej. Archivos .c y .h del directorio. Uso de Directory.GetFiles("C:\", " .c; .h"); No funciona. Es muy malo invocar Directory.GetFiles(...); dos veces.. 🙁

Gracias.

no es posible especificar varios filtros en una sola llamada al método GetFiles (). Puedes encontrar alternativas aquí

Si está utilizando .NET 4.0, iría con Directory.EnumerateFiles :

 var files = from f in Directory.EnumerateFiles("C:\\") where f.EndsWith(".c") || f.EndsWith(".h") select f; 

Puedes probar algo como esto:

  var query = from p in Directory.GetFiles(@"C:\").AsEnumerable() where p.Contains(".c") || p.Contains(".h") select p; 

Consulte Cómo obtener archivos con múltiples extensiones utilizando métodos de extensión.

Aquí hay algunas funciones de ayuda útiles para simular tener múltiples filtros:

 // .NET 4.0 friendly public static IEnumerable 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 GetFiles(string path, params string[] filters) { return filters.Length == 0 ? Directory.GetFiles(path) : filters.SelectMany(filter => Directory.GetFiles(path, filter)); } 

Para .Net 3.5.

 public IEnumerable 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)); } 

Uso:

 GetFiles(@"c:\", "*.c", "*.h"); 

Probablemente quieras agregar alguna validación