2010-01-13 8 views
8

La siguiente llamada a método devuelve todos los archivos xml en el directorio especificado..net Patrón de tarjeta de información de DirectoryInfo para manejar la exclusión

FileInfo[] Files = Directory.GetFiles("*.xml"); 

Me gustaría obtener todos los archivos XML en el directorio en el nombre del archivo no termina con "_update.xml"

por ejemplo .... si tengo los siguientes archivos

ABC.xml 
ABC2.xml 
ABC3_update.xml 

entonces quiero una llamada que sólo devolverá:

ABC.xml 
ABC2.xml 

Es esto posible?

Respuesta

13

No creo que pueda usar los comodines de búsqueda para ese tipo de exclusión. Sin embargo, puede filtrar la lista de archivos después del hecho. Es bastante fácil con LINQ. Aunque, si su directorio es muy grande, esto puede resultar en un gran procesamiento de la lista de archivos en la memoria.

Probar:

FileInfo[] files = 
    Directory.GetFiles("*.xml") // all XML files 
     .Where(fi => !fi.Name.EndsWith("_update.xml", CurrentCultureIgnoreCase)) 
     .ToArray(); 
+0

aunque esto realiza el LINQ después de que GetFiles ya se haya ejecutado, por lo que si está intentando limitarlo porque el directorio es muy grande podría no ayudar – ryber

+0

JL, puede hacerlo también ... solo pon un! en el que – ryber

+0

lo siento me malinterpreté ... muy impresionante ... este es el verdadero poder de LINQ .... –

5

No con un mapeo comodín como este, no. Tendrás que eliminar los que no quieras después.

Tenga en cuenta que es en realidad Directory.GetFiles("*.xml") interpretarse como emparejar todos los archivos con extensiones comenzando conxml, no sólo igual a xml - una peculiaridad del método! Por lo tanto, quizás deba excluir otros archivos de manera similar.

En this page of MSDN Se explica así:

Cuando se utiliza el carácter comodín asterisco en un searchPattern (por ejemplo, ".txt"), el comportamiento de adaptación varía en función de la longitud de la extensión del archivo especificado . Un SearchPattern con una extensión de archivo de exactamente tres caracteres devuelve archivos con una extensión de tres o más caracteres, donde los primeros tres caracteres coinciden con la extensión de archivo especificada en el searchPattern. Un SearchPattern con una extensión de archivo de uno, dos o más de tres caracteres devuelve solo archivos con extensiones de exactamente esa longitud que coinciden con la extensión de archivo especificada en el searchPattern. Al usar el carácter comodín de signo de interrogación, este método devuelve solo los archivos que coinciden con la extensión de archivo especificada. Por ejemplo, dados dos archivos en un directorio, "archivo1.txt" y "archivo1.txt otro", un patrón de búsqueda de "archivo? .txt" devuelve solo el primer archivo, mientras que un patrón de búsqueda de "archivo .txt" regresa ambos archivos.

+0

-1 de expresiones regulares (un poco pesados ​​para esto) 2 para la peculiaridad – Will

+0

Sí, de acuerdo. Has eliminado –

+0

+1 por la peculiaridad ... –

Cuestiones relacionadas