2010-05-11 26 views
5

Necesito obtener una lista de archivos en algún disco con rutas que coincidan con un patrón específico, por ejemplo FA \ d \ d \ d \ d.xml donde \ d es dígito (0,1 , 2..9). Entonces los archivos pueden tener nombres como FA5423.xml.Cómo buscar archivos según RegEx en C#

¿Cuál es el nombre más eficiente para hacer esto?

Respuesta

1

utilizar la API de directorio para encontrar FA????.xml, y correr la lista resultante a través de un filtro de expresiones regulares:

var fa = from f in Directory.GetFiles("FA????.xml") 
     where Regex.Match(f, "FA\d\d\d\d\.xml") 
     select f; 
+4

Will not Regex.Match devuelve un objeto Match en lugar de un booleano? –

3

Se podría hacer algo como:

System.IO.Directory.GetFiles(@"C:\", "FA????.xml", SearchOption.AllDirectories); 

Luego de los resultados simplemente iterar sobre ellas y verificarlos contra su expresión regular, es decir, que los caracteres ? en el nombre son todos números

15

¿Está utilizando C# 3?

Regex reg = new Regex(@"^FA[0-9]{4}\.xml$"); 
var files = Directory.GetFiles(yourPath, "*.xml").Where(path => reg.IsMatch(path)); 
+0

'.Select (path => path)' es redundante. –

+0

oki ... y ahora que me veo de nuevo debería anclar la expresión regular y no tiene sentido obtener '*. *' Tampoco. –

+0

@Phil Es mejor utilizar EnumerateFiles como este http://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder porque debido al rendimiento se puede ver la diferencia en este http://stackoverflow.com/questions/5669617/what-is-the-difference-between-directory-enumeratefiles-vs-directory-getfiles – QMaster

Cuestiones relacionadas