Quiero una lista de todos los archivos y carpetas que mi programa tiene acceso y los escribe en un archivo de texto. ¿Cómo puedo obtener la lista? Necesito una manera que va a coger o no tirar UnauthorizedAccessExceptions en las carpetas que no son accesibles.

5 Comentarios

  1. 8

    Por favor, trate de usar el código:

    private static IEnumerable<string> Traverse(string rootDirectory)
    {
        IEnumerable<string> files = Enumerable.Empty<string>();
        IEnumerable<string> directories = Enumerable.Empty<string>();
        try
        {
            //The test for UnauthorizedAccessException.
            var permission = new FileIOPermission(FileIOPermissionAccess.PathDiscovery, rootDirectory);
            permission.Demand();
    
            files = Directory.GetFiles(rootDirectory);
            directories = Directory.GetDirectories(rootDirectory);
        }
        catch
        {
            //Ignore folder (access denied).
            rootDirectory = null;
        }
    
        if (rootDirectory != null)
            yield return rootDirectory;
    
        foreach (var file in files)
        {
            yield return file;
        }
    
        //Recursive call for SelectMany.
        var subdirectoryItems = directories.SelectMany(Traverse);
        foreach (var result in subdirectoryItems)
        {
            yield return result;
        }
    }

    Código de cliente:

    var paths = Traverse(@"Directory path");
    File.WriteAllLines(@"File path for the list", paths);
  2. 2

    Intentar

    string[] files = Directory.GetFiles(@"C:\", "*.*", SearchOption.AllDirectories);

    Esto debe darle una matriz que contiene todos los archivos en el disco duro.

    • El uso de la solución de lanza Access to the path 'C:\$Recycle.Bin\S-1-5-21-1211431010-2331069801-34201645-1008' is denied.
  3. 0

    Retirar Directory.GetFiles() y métodos relacionados.

    • No puedo encontrar una manera de lista de TODOS los archivos sin tener una UnauthorizedAccessException con este método.
    • Vas a tener que darle un poco de esfuerzo para trabajar a través de este. Mirar a través de los métodos que hay para conseguir los permisos. Pero, al final, siempre se puede atrapar excepciones y, si se puede conseguir que la excepción, a continuación, el programa sabe que no puede tener acceso a ese lugar en particular.
    • Es porque usted no tiene suficientes derechos de acceso a todos los thedirectories en la unidad de disco duro. Usted simplemente debe envolver la llamada con los bloques try y gestión de estos errores.
    • Por favor, considere la posibilidad de no utilizar el Directorio.GetFiles() para recuperar todos los archivos en una máquina. Este método devuelve una matriz y por lo tanto hará todo iteración cuando se llama al método. Es difícil predecir las consecuencias en la máquina cliente, y lo más probable es que usted va a utilizar mucho más del lado del cliente de los recursos que te gustaría. Yo seguro que no quiere que cualquier código que se ejecuta en mi pc que hizo esto. Si usted realmente desea enumerar todos los archivos en un pc, debe considerar la posibilidad de una forma mucho más suave enfoque en mi humilde opinión, comenzando con el Directorio.EnumerateFiles como sugerido por @Candie’ 🙂
  4. 0

    Puedes probar con

    var files = from file in Directory.EnumerateFiles(@"your Path", "*.*", SearchOption.AllDirectories)
                select file;
  5. 0

    El uso de Travesía que Serge sugerido y la clase de DriveInfo usted puede tener acceso a todos los archivos disponibles para el pc.

    DriveInfo[] allDrives = DriveInfo.GetDrives();
    
    foreach (DriveInfo d in allDrives)
    {
       if (d.IsReady == true)
       {
          var paths = Traverse(d.Name);
          File.AppendAllLines(@"File path for the list", paths);
       }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here