2016-05-25 18 views
4

Hallo, ich derzeit Unterverzeichnisse habe ich durch diesen Anruf wollte:UnauthorizedAccessException mit GetDirectories

foreach (DirectoryInfo dir in parent) 
     { 
     try 
     { 
      subDirectories = dir.GetDirectories().Where(d => d.Exists == true).ToArray(); 
     } 
     catch(UnauthorizedAccessException e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     foreach (DirectoryInfo subdir in subDirectories) 
     { 
      Console.WriteLine(subdir); 
      var temp = new List<DirectoryInfo>(); 
      temp = subdir.GetDirectories("*", SearchOption.AllDirectories).Where(d => reg.IsMatch(d.Name)).Where((d => !d.FullName.EndsWith("TESTS"))).Where(d => !(d.GetDirectories().Length == 0 && d.GetFiles().Length == 0)).Where(d => d.GetFiles().Length > 3).ToList(); 
      candidates.AddRange(temp); 
     } 
     } 

     foreach(DirectoryInfo dir in candidates) 
     { 
     Console.WriteLine(dir); 
     } 

so jetzt mein Problem ist, dass meine endgültige Liste Kandidaten rief ich nichts bekommen, weil im einen Zugang Problem bekommen aufgrund eines von der Ordner namens lost + gefunden in meinem Unterverzeichnis Ordner im try Block. Ich versuchte mit Versuch und Fangen, um die Ausnahme zu behandeln, also konnte ich meine Überprüfungen tun, die ich eigentlich nicht über diesen Ordner interessiere und ich versuche, es gerade zu ignorieren, aber ich bin nicht sicher, wie man es aus meinen get Verzeichnissen heraussuchen sucht Gedanken? Ich habe bereits versucht, einen Filter mit. Wo ich jeden Ordner zu ignorieren, die den Ordnernamen, aber das hat nicht funktioniert entweder nur mein Programm auf den Namen des Ordners gestoppt.

+0

Diese Frage bereits beantwortet werden, finden Sie folgendes: [link] (http://stackoverflow.com/questions/172544/ignore-folders-files-when- directory-getfiles-is-denied-access) –

+0

dies ist für das abholen von dateien aber ich brauche verzeichnisse keine dateien – JPhillips

+0

Hast du es mit 'Directory.EnumerateDirectories()' versucht? Es bietet ein bisschen mehr Flexibilität und ermöglicht es Ihnen, mindestens die Namen der gefundenen Verzeichnisse abzurufen. Leider führen versteckte Systemverzeichnisse wie 'lost + found' zu' UnauthorizedAccessException'. Stellen Sie sicher, dass Sie die Standardoption "SearchOption" verwenden, damit die Suche nicht automatisch in eines der untergeordneten Verzeichnisse wechselt. –

Antwort

0

Sie können Rekursion wie Microsoft erklärt: link.

+0

wie ist das anders als ich es tun, ich bin einfach mit einem Versuch und fangen Block in dem Bereich, wo mein Prog ist fehlgeschlagen und ich habe mehrere Möglichkeiten versucht, den Catch-Teil zu behandeln, aber es schlägt immer noch fehl und ignoriert den einen nicht. – JPhillips

+0

Wenn Sie die Verzeichnisse abrufen, bevor Sie sie durchlaufen, während Sie den getDirectories-Aufruf versuchen, wirkt sich der Catch nicht auf die Foreach aus und bricht nicht ab –

0

Ich habe die gleiche Frage (ResourceContext.GetForCurrentView call exception) über diese Ausnahme (UnauthorizedAccessException), und diese Verbindung gibt eine Antwort auf den Grund, warum dies geschieht:

http://www.blackwasp.co.uk/FolderRecursion.aspx

Kurzzitat:

... Schlüssel unter diesen ist, dass einige der Ordner, die Sie versuchen, lesen, könnte b e so konfiguriert, dass der aktuelle Benutzer nicht darauf zugreifen kann. Anstatt die Ordner zu ignorieren, für die Sie den Zugriff eingeschränkt haben, löst die Methode eine UnauthorizedAccessException aus. Jedoch können wir dieses Problem umgehen, indem Sie unsere eigene rekursive Ordnersuche Code erstellen. ...

Lösung:

private static void ShowAllFoldersUnder(string path, int indent) 
{ 
    try 
    { 
     foreach (string folder in Directory.GetDirectories(path)) 
     { 
      Console.WriteLine("{0}{1}", new string(' ', indent), Path.GetFileName(folder)); 
      ShowAllFoldersUnder(folder, indent + 2); 
     } 
    } 
    catch (UnauthorizedAccessException) { } 
}