Entwickler-Ecke
IO, XML und Registry - TempFiles löschen
Metrik - Mo 11.12.06 19:54
Titel: TempFiles löschen
Hallo
Ich bin gerade dabei ein Tool zu schreiben, dass einem den computer von Müll entfernt :D
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 - 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 - Mi 13.12.06 17:22
Hallo
Danke, hätte ich eigentlich selber draufkommen können :autsch:
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 - 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 - Mi 13.12.06 18:59
Metrik hat folgendes geschrieben: |
Danke, hätte ich eigentlich selber draufkommen können :autsch: |
dann solltest du doch nun ebenfalls selbst herausfinden können, wo ein weiterer Catch-Block eingefügt werden muss.
Metrik - 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. - Fr 15.12.06 19:32
Laut Doku wirft File.Delete doch eine UnauthorizedAccessException, wenn es nicht geht. Die kannst doch abfangen.
Metrik - 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 - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!