Autor |
Beitrag |
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: Mo 11.12.06 19:54
Hallo
Ich bin gerade dabei ein Tool zu schreiben, dass einem den computer von Müll entfernt
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| class Cleaner { static void Main(string[] args) { delFiles(); } public static void delFiles() { string path = @"c:\"; string searchpattern = "*.tmp";
string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories);
foreach (string directory in directories) { File.Delete(directory); Console.WriteLine("Deleting {0}",directory); } } } |
Das funktioniert eigentlich auch ganz nett, nur wenn ich auf ein Verzeichnis keinen Zugriff habe, geht gar nichts.
Wenn ich das ganz mit try abfange:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| class Cleaner { static void Main(string[] args) { delFiles(); Console.ReadLine(); } public static void delFiles() { try { string path = @"c:\"; string searchpattern = "*.tmp";
string[] directories = Directory.GetFiles(path, searchpattern, SearchOption.AllDirectories);
foreach (string directory in directories) { File.Delete(directory); Console.WriteLine("Deleting {0}", directory); } } catch (Exception exception) { Console.WriteLine(exception.Message); } } } |
Das Problem ist hier, wenn er einen Fehler finden (Zugriff verweigert auf ....) dann macht er nicht mehr weiter, sonder bleibt in der Exception stecken. Gibts nicht ne möglichkeit, damit er dieses Verzeichnis einfach überspringt?
Könnt ihr mir sagen wir ich das lösen kann ?
Metrik
|
|
DareDevil
Beiträge: 70
Windows7
C# (VS 2010)
|
Verfasst: Mo 11.12.06 23:35
Du musst das try catch anders setzen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| class Cleaner { static void Main(string[] args) { delFiles(); } public static void delFiles() { try { string path = @"c:\"; string searchpattern = "*.tmp"; string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories); foreach (string directory in directories) { File.Delete(directory); Console.WriteLine("Deleting {0}",directory); } } catch { Console.WriteLine(exception.Message); } } |
Der fehler tritt ja bei dem "File.Delete()" auf dann müsste der Quelletext so aussehen.
Da das try die ganze Anweisung umschließt sammt der Schleife wird die Schleife abgebrochen wenn "File.Delete()" nicht ausgeführt werden kann damit in das catch gesprungen werden kann.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| class Cleaner { static void Main(string[] args) { delFiles(); } public static void delFiles() { string path = @"c:\"; string searchpattern = "*.tmp"; string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories); foreach (string directory in directories) { try { <span style="color: red">File.Delete(directory);</span> Console.WriteLine("Deleting {0}",directory); } catch { Console.WriteLine(exception.Message); } } } } |
Greez
Pascal
|
|
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: Mi 13.12.06 17:22
Hallo
Danke, hätte ich eigentlich selber draufkommen können
Zitat: | try
{
File.Delete(directory);
Console.WriteLine("Deleting {0}",directory);
}
catch
{
Console.WriteLine(exception.Message);
} |
Was machst du genau mit der Zeile File.Delete(directory); ?
Das mit den Farben ist mir nicht ganz klar. Hab das auch ausprobiert, hat bei mit nicht gefunzt
Metrik
|
|
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: Mi 13.12.06 17:25
Hmm, hab das jetzt nochmal ausprobiert ...
Der Fehler wird in der zeile
C#-Quelltext 1: 2:
| string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories); foreach (string directory in directories) |
erzeugt.
Was soll ich jetzt machen ?
Metrik
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 13.12.06 18:59
Metrik hat folgendes geschrieben: | Danke, hätte ich eigentlich selber draufkommen können |
dann solltest du doch nun ebenfalls selbst herausfinden können, wo ein weiterer Catch-Block eingefügt werden muss.
|
|
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: Fr 15.12.06 19:25
Hallo
Irgendwie hat mir bis jetzt noch keiner so richtig helfen könnnen ....
Geht mal von vollgendem source aus:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| class Cleaner { static void Main(string[] args) { delFiles(); } public static void delFiles() { string path = @"c:\"; string searchpattern = "*.tmp"; string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories); foreach (string directory in directories) { File.Delete(directory); Console.WriteLine("Deleting {0}",directory); } } } |
Jetzt mal die Testsituation, dass der ausführende Benutzer auf das Verzeichnis c:\test keinerlei Rechte hat.
Dann geht nämlich gar nichts
Kann mir wer eine Lösung zeigen, die dieses Problem löst? vielleicht ist auch mein Ansatz falsch zum das Problem zu lösen. Jeder Tipp willkommen.
Metrik
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 15.12.06 19:32
Laut Doku wirft File.Delete doch eine UnauthorizedAccessException, wenn es nicht geht. Die kannst doch abfangen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: Sa 16.12.06 18:56
Hallo
Hat mir nicht wirklich geholfen... Ich verstehe das selber nicht, warum dass das auf keine Weise geht. Könnte nicht einer, einfach schnell den sourcecode kopieren und das bei sich ausporbieren ?
Aus meiner Sicher entsteht der Fehler nicht bei der Zeile
C#-Quelltext 1:
| File.Delete(directory); |
sondern hier bei SearchOption.AllDirectories
C#-Quelltext 1:
| string[] directories = Directory.GetFiles(path,searchpattern,SearchOption.AllDirectories); |
Wäre euch dankbar, wenn ihr mir helfen könntet
MEtrik
|
|
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: Sa 16.12.06 19:05
Ich muss hier vielleicht noch anfügen, ich kann zwar den error abfangen, damit nicht alles abstürtz, aber dann sucht der nicht weiter nach Verzeichnissen.
Der soll aber alle durchsuchen, die er lesen darf.
MEtrik
|
|
Metrik
Beiträge: 80
Win XP, Win Vista
C# (VS 2003, #Develop)
|
Verfasst: So 17.12.06 10:40
Hallo
Gibt es nicht eine Möglichkeit, um dem Programm zu sagen, dass es einfach dieses Verzeichnis überstpringen und weiterfahren soll ?
Metrik
|
|