Cómo excluir cierto tipo de archivo cuando obtención de archivos de un directorio?

Traté de

var files = Directory.GetFiles(jobDir);

Pero parece que esta función sólo se puede elegir los tipos de archivos que desea incluir, no excluir.

InformationsquelleAutor Graviton | 2009-04-16

10 Comentarios

  1. 83

    Debe filtrar estos archivos usted mismo, usted puede escribir algo como esto:

        var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml"));
    • Como yo ahora la EndsWith toma letras mayúsculas en cuenta, lo que significa que si el tipo de archivo sería .XML no la excluyen.
    • var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml", true));
    • var files = Directory.GetFiles(jobDir).Where(name => !name.EndsWith(".xml", StringComparison.OrdinalIgnoreCase));
  2. 13

    Usted podría intentar algo como esto:

      var allFiles = Directory.GetFiles(@"C:\Path\", "");
      var filesToExclude = Directory.GetFiles(@"C:\Path\", "*.txt");
      var wantedFiles = allFiles.Except(filesToExclude);
    • Esto funciona muy bien en todas las formas de la GetFiles() comando. No resuelve la cuestión, precisamente, pero se obtiene el beneficio adicional de aprovechar la searchPattern parámetro, que es mucho más poderoso que el de sólo mirar a las extensiones.
    • Consejo: esto no funciona con el método de instancia DirectoryInfo.GetFiles(): devuelve un array de FileInfo (en lugar de cadena), que no es comparable o no equatable clase.
    • Esta solución es buena para multi patrón de exclusión de archivos. Gracias
  3. 12

    Sé, esta es una vieja petición, sino acerca de mí, es siempre importante.

    si quieres exlude una lista de archivo de extensión: (basado en https://stackoverflow.com/a/19961761/1970301)

    var exts = new[] { ".mp3", ".jpg" };
    
    
    
    public IEnumerable<string> FilterFiles(string path, params string[] exts) {
        return
            Directory
            .GetFiles(path, SearchOption.AllDirectories)
            .Where(file => !exts.Any(x => file.Extension.EndsWith(x, StringComparison.OrdinalIgnoreCase)));
    }
    • Yo estaba buscando un LINQ manera de excluir de varias extensiones. Me encontré aquí. Muchas gracias.
  4. 10

    Supongo que se puede utilizar la expresión lambda

    var files = Array.FindAll(Directory.GetFiles(jobDir), x => !x.EndWith(".myext"))
    • Buena respuesta, esto funciona para mí
  5. 3

    Que usted puede probar esto,

    var directoryInfo = new DirectoryInfo("C:\YourPath");
    var filesInfo = directoryInfo.GetFiles().Where(x => x.Extension != ".pdb");
  6. 0

    Afaik no hay manera de especificar la exclusión de los patrones.
    Tienes que hacerlo manualmente, como:

    string[] files = Directory.GetFiles(myDir);
    foreach(string fileName in files)
    {
        DoSomething(fileName);
    }
    • Gracias, pero de forma manual de hacerlo es algo que en realidad no me gusta
    • Tal vez puede derivar su propio directorio de clase a partir de la base del Sistema.IO.Directorio de si es posible (yo no lo he probado).
  7. 0

    Esta es mi versión de las respuestas que he leído por encima

    List<FileInfo> fileInfoList = ((DirectoryInfo)new DirectoryInfo(myPath)).GetFiles(fileNameOnly + "*").Where(x => !x.Name.EndsWith(".pdf")).ToList<FileInfo>();
  8. 0

    Me encontré con esta buscando un método para hacer esto, donde la exclusión podría utilizar el patrón de búsqueda reglas y no sólo EndWith tipo de lógica.

    por ejemplo, el patrón de Búsqueda comodín especificador de partidos:

    • de asterisco ( * ) Cero o más caracteres en esa posición.
    • ? (signo de interrogación) Cero o un carácter en esa posición.

    Esto podría ser utilizado para el anterior como sigue.

    string dir = @"C:\Temp";
    var items = Directory.GetFiles(dir, "*.*").Except(Directory.GetFiles(dir, "*.xml"));

    O excluir elementos que de otra manera serían incluidos.

    string dir = @"C:\Temp";
    var items = Directory.GetFiles(dir, "*.txt").Except(Directory.GetFiles(dir, "*HOLD*.txt"));
  9. 0

    yo que

    Directory.GetFiles(PATH, "*.dll"))

    y la RUTA de acceso es:

    public static string _PATH = Ruta de acceso.GetDirectoryName(Asamblea.GetExecutingAssembly().La ubicación);

  10. -4
    string[] filesToDelete = Directory.GetFiles(@"C:\Temp", "*.der");
    
    foreach (string fileName in filesToDelete)
    {
        File.Delete(fileName);
    }
    • Que claramente no leer la pregunta. -1
    • esta es la solución,pero muy radical
    • lol .no hay manera por favor

Dejar respuesta

Please enter your comment!
Please enter your name here