¿Cuál es la sintaxis para configurar múltiples extensiones de archivo como searchPattern
activado Directory.GetFiles()
? Por ejemplo, filtrar archivos con extensiones .aspx y .ascx .
// TODO: Set the string 'searchPattern' to only get files with
// the extension '.aspx' and '.ascx'.
var filteredFiles = Directory.GetFiles(path, searchPattern);
Actualización : LINQ no es una opción , debe searchPattern
pasarse GetFiles
, como se especifica en la pregunta.
c#
.net
system.io.directory
Seb Nilsson
fuente
fuente
Respuestas:
Creo que no hay una solución "lista para usar", eso es una limitación del método Directory.GetFiles.
Sin embargo, es bastante fácil escribir su propio método, aquí hay un ejemplo .
El código podría ser:
fuente
Editar 2014-07-23
Puede hacer esto en .NET 4.5 para una enumeración más rápida:
Directory.EnumerateFiles en MSDN
fuente
GetFiles
vuelvestring[]
.Directory.EnumerateFiles
para aumentar el rendimiento ... stackoverflow.com/questions/5669617/…file.EndsWith("...", StringComparison.InvariantCultureIgnoreCase);
lugar deToLower
GetFiles solo puede coincidir con un patrón único, pero puede usar Linq para invocar GetFiles con múltiples patrones:
Vea la sección de comentarios aquí: http://www.codeproject.com/KB/aspnet/NET_DirectoryInfo.aspx
fuente
new string[]{"*.txt","filename.*"}
. Sin embargo, la llamada a enDistinct
realidad no resuelve este problema, ya que los objetos FileInfo se comparan usando igualdad de referencia, no igualdad semántica. Se puede solucionar eliminandoDistinct
o pasando un anIEqualityComparer<FileInfo>
. Editado para hacer lo primero.SelectMany
volverá a iterar sobre la misma estructura de archivos (y nuevamente), por lo que podría ser subóptimo en términos de rendimiento.Me gusta este método, porque es legible y evita múltiples iteraciones del directorio:
fuente
HashSet<string>
Me temo que tendrá que hacer algo como esto. Muteé la expresión regular desde aquí .
fuente
Directory.EnumerateFiles
para aumentar el rendimiento ( ¿Cuál es la diferencia entre Directory.EnumerateFiles y Directory.GetFiles? )O bien, puede ser más rápido dividir y fusionar tus globos (al menos se ve más limpio):
fuente
La solución fácil de recordar, perezosa y quizás imperfecta:
fuente
Yo usaría lo siguiente:
EDITAR: se corrigió la falta de coincidencia entre Directory y DirectoryInfo
fuente
Una forma más eficiente de obtener archivos con las extensiones ".aspx" y ".ascx" que evita consultar el sistema de archivos varias veces y evita devolver muchos archivos no deseados, es filtrar previamente los archivos mediante un patrón de búsqueda aproximado y para refinar el resultado después:
fuente
Intentaría especificar algo como
deberia de funcionar.
fuente
fuente
fuente
En lugar de la función EndsWith, elegiría usar el
Path.GetExtension()
método en su lugar. Aquí está el ejemplo completo:o:
(Úselo
StringComparison.OrdinalIgnoreCase
si le importa el rendimiento: comparaciones de cadenas de MSDN )fuente
se parece a esta demostración:
fuente
Path.GetExtension
lo que puedes usar.@Daniel B, gracias por la sugerencia de escribir mi propia versión de esta función. Tiene el mismo comportamiento que Directory.GetFiles, pero admite el filtrado de expresiones regulares.
Lo encontré útil, así que pensé en compartirlo.
fuente
C # versión de la respuesta de @ qfactor77. Esta es la mejor manera sin LINQ.
ahora devuelve
filePath
una matriz de cadenas. Al principio necesitasTambién necesita agregar referencia a
Microsoft.VisualBasic
fuente
Hice una manera simple de buscar tantas extensiones como necesite, y sin ToLower (), RegEx, foreach ...
Trabajando en .Net Standard 2.0.
fuente
Puedes hacerlo asi
fuente
fuente
Solo me gustaría decir que si usa en
FileIO.FileSystem.GetFiles
lugar deDirectory.GetFiles
, permitirá una variedad de comodines.Por ejemplo:
fuente
FileIO
?