323 Aufrufe
Gefragt 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
Beantwortet von repiv Mitglied (267 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
...