3.5k Aufrufe
in Anwendungen(Java,C++...) von
Mahlzeit,

kann man mit einen Try/Catch-Block für Directory.GetDirectories(drive,"*",
SearchOption.AllDirectories) herausfinden, ob ein Unterverzeichnis lesbar ist?

Folgenden Code habe ich geschrieben:

[code]
        public string FindPath(string dir)
        {
            string path = "";

            foreach (string drive in Directory.GetLogicalDrives())
            {
                foreach (string p in Directory.GetDirectories(drive, "*",
SearchOption.AllDirectories))
                {
                    if (Directory.Exists(p + @"\" + dir)) // Verzeichnis gefunden
                    {
                        path = p;
                        break;
                    }
                }
                break;
            }
            return path;
        }
[/code]

Ich erhalte eine UnauthorizedAccessException, kann sie aber aber nicht behandeln.  
Habe bereits erfolglos folgendes versucht:

[code]
        public string FindPath(string dir)
        {
            string path = "";

            foreach (string drive in Directory.GetLogicalDrives())
            {
                try{
                foreach (string p in Directory.GetDirectories(drive, "*",
SearchOption.AllDirectories))
                {
                    if (Directory.Exists(p + @"\" + dir)) // Verzeichnis gefunden
                    {
                        path = p;
                        break;
                    }
                }
                catch(UnauthorizedAccessException)
                {
                       continue;
                }
                break;
            }
            return path;
        }
[/code]

Kann jemand helfen?

1 Antwort

0 Punkte
von repiv Mitglied (272 Punkte)
Hallo,
die Exception wird schon gefangen, nur ist die Bearbeitung dann zu Ende und man kann nicht mehr mit dem nächsten Ordner fortfahren.
Per
[code]Directory.GetDirectories(drive, "*", SearchOption.AllDirectories))[/code]
geht es hier nicht weiter. Man muss selbst per Rekursion durch die Ordner gehen.

Folgender Ansatz könnte helfen:
[code]
private void button1_Click(object sender, EventArgs e)
{
foreach (string drive in Directory.GetLogicalDrives())
{
    FindPath(drive, "temp");
}
}
private void FindPath(string dir, string search)
{
try
{
    foreach (string subDir in Directory.GetDirectories(dir))
    {
        if (Directory.Exists(Path.Combine(subDir, search))) // Verzeichnis gefunden
        {
            Console.WriteLine(subDir);
            break;
        }
        try
        {
            FindPath(subDir, search);
        }
        catch (UnauthorizedAccessException e) { }
    }
}
catch (IOException ioe) { }
}
[/code]

Gruß Martin

Deine Antwort

Dein angezeigter Name (optional):
Datenschutz: Deine Email-Adresse benutzen wir ausschließlich, um dir Benachrichtigungen zu schicken. Es gilt unsere Datenschutzerklärung.
Anti-Spam-Captcha:
Bitte logge dich ein oder melde dich neu an, um das Anti-Spam-Captcha zu vermeiden.
...