Laden...

DirectoryInfo.GetFiles: fehlenden Rechte, alle Unterverzeichnisse aufzulisten

Erstellt von SatMAX vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.734 Views
S
SatMAX Themenstarter:in
21 Beiträge seit 2006
vor 15 Jahren
DirectoryInfo.GetFiles: fehlenden Rechte, alle Unterverzeichnisse aufzulisten

Folgender Code bringt das Programm zum Absturz (getestet unter Vista). Ursache dürften die fehlenden Rechte sein, alle Unterverzeichnisse aufzulisten. Wie umgeht man so etwas am besten?

Es würde reichen, wenn nur die Inhalte der Unterverzeichnisse aufgelistet werden, auf die der User auch die Rechte hat.


  var files = from file in new DirectoryInfo(@"C:\").GetFiles("*",SearchOption.AllDirectories)
                        where file.Name.StartsWith("_")
                        select file;
           
            foreach (var name in files)
            {
                Console.WriteLine(name.GetType());
            }

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo SatMAX,

mit LINQ hat das nichts zu tun. Das Problem ist, dass SearchOption.AllDirectories so funktioniert wie du festgestellt hast. Sobald auf ein Verzeichnis kein Zugriff besteht, knallt es. Für eine Alternative siehe [Snippet] Verzeichnisse und Dateien rekursiv durchlaufen.

herbivore

1.044 Beiträge seit 2008
vor 15 Jahren

Hallo SatMAX,

die Rechte ist dazu da damit man die nicht umgehen soll! Es gibt sicherlich Möglich um die Rechte zu umgehen, dies ist jedoch nicht erlaubt.

zero_x

5.742 Beiträge seit 2007
vor 15 Jahren

Hallo zero_x,

die Rechte ist dazu da damit man die nicht umgehen soll!

So wie ich SatMAX verstanden habe, möchte er nur den Absturz des Programmes umgehen; er schreibt ja, es reiche ihm, wenn die entsprechenden Verzeichnisse einfach ignoriert werden.

Es gibt sicherlich Möglich um die Rechte zu umgehen, dies ist jedoch nicht erlaubt.

Na ja - wenn der Benutzer als Admin angemeldet ist, kann er sich die fehlenden Rechte einfach holen. Das soll natürlich nicht heißen, dass es gut wäre, wenn ein Programm, das Verzeichnisse durchsuchen soll, das gleich erledigen würde; meist gibt es ja, wie du gesagt hast, Gründe für eingeschränkte Verzeichnisrechte.
Verboten ist das aber nicht (außer natürlich, man hat sich die Admin Rechte an einem fremden PC irgendwie "erschlichen").

1.044 Beiträge seit 2008
vor 15 Jahren

Hallo SatMAX,

du kannst es mittels einer Exception abfangen und den Absturz deines Programms vermeiden. Wenn du dein Code in Visual Studio startest bekommst du, wenn du keine Adminrechte hast, eine Fehlermeldung, sprich Exception. Notiere dir den Namen und fange diese wie hier im Beispiel ab:

catch(NameDerException e)
{ /* Das abfangen der Exception */ }

try
{ /* Was du machen möchtest */ }

finally
{ /* ... */}

Weitere Informationen findest du hier: try-catch (C# Reference).

Hallo winSharp93,

nun, ich habe ihn so verstanden, dass es die Funktion unter Vista umgehen möchte. Wie es nun genau möglich ist weiß ich auch nicht, da ich ein Vista verwende.

zero_x

5.742 Beiträge seit 2007
vor 15 Jahren

du kannst es mittels einer Exception abfangen

Dann hat man allerdings keinerlei Ergebnisse mehr - auch nicht von Verzeichnissen, auf die man eigentlich Zugriff hätte.

Wie es nun genau möglich ist weiß ich auch nicht, da ich ein Vista verwende.

Mit Vista hat das nichts zu tun - diese Berechtigungen gab/gibt es auch schon unter Windows 2000.