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());
}
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
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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").
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.