Hallo.
Ich entwickle grade eine Konsolenanwendung (später evtl. + GUI) mit der Dateien nach übergebenen Datum und weiteren Argumenten gelöscht werden...
Nun habe ich ein Problem damit zu prüfen, ob Dateien überhaupt gelöscht werden dürfen. Ansonsten gibt es einen Fehler und die geworfene Exception beendet an der Stelle das Programm.
Ich komme deswegen einfach nicht weiter 😦
Wie prüfe ich, ob eine Datei gelöscht werden darf?
Gruß
Hallo NitramX,
willkommen bei myCSharp.de
Ansonsten gibt es einen Fehler und die geworfene Exception beendet an der Stelle das Programm.
In C# kann man Exceptions mit einem Try-Catch Block abfangen und darauf reagieren
Aber das sind absolute Grundlagen. Bitte beachte: [Hinweis] Wie poste ich richtig? 1.1.1
Gruss
Michael
Hallo,
Wie prüfe ich, ob eine Datei gelöscht werden darf?
Ich denke das ist eine der wenigen Ausnahmen in den try-catch zur Ablaufsteuerung verwendet werden darf. D.h. probier einfach löschen und wenns nicht geht fang den Fehler ab.
Probier auch mal was die Forensuche dazu liefert 😉
Stichworte: Datei gesperrt, etc.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Ich denke das ist eine der wenigen Ausnahmen in den try-catch zur Ablaufsteuerung verwendet werden darf. D.h. probier einfach löschen und wenns nicht geht fang den Fehler ab.
Danke für den Hinweis! Ich habe es vorher mit
catch (UnauthorizedAccessException e)
probiert. Doch an der Stelle, an der die Exception geworfen wird, wird das Programm beendet - es gibt ja kein "resume next" oder so(was aber auch ecklig wäre). Jetzt habe ich es ähnlich implementiert, wie hier beschrieben: Prüfen, ob Datei verwendet wird
Ich weiß es ist jetzt blödes Meckern, es ist aber keine schöne Lösung Exceptions zu Missbrauchen/Die Anwendung bewusst in eine Exception laufen zu lassen. Deswegen würde ich gerne wissen:
Wie prüfe ich, ob eine Datei gelöscht werden darf?
Sollte ich noch eine andere Lösung finden, werde ich sie hier bekannt geben.
Nichtsdestotrotz: Danke 👍
An Hand welcher Kriterien würdest Du denn zuverlässig prüfen wollen, ob eine Datei gelöscht werden darf?
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Ich würde gerne über die Zugriffsrechte gehen. Aber leider blicke ich da noch nicht so recht durch.
Es soll geprüft werden können ob eine Datei gelöscht werden kann, ohne es tatsächlich vorher zu versuchen.
Hallo,
es gehört aber noch mehr als die Zugriffsrechte dazu um eine Datei löschen zu könne. ZB was ist wenn die Datei von einem andern Prozess (exklusiv) verwendet wird? Dann kann sie nicht gelöscht werden auch wenn die Zugriffsrechte das erlauben würden.
Es gibt sicherlich noch mehrer Punkte die ein Löschen verhindern. Von daher ist hier und nur hier - wie oben bereits erwähnt - triviales Trial & Error hier der korrekte Weg.
.net bietetet außerdem keine Methode um zu Prüfen ob eine Datei gelöscht werden kann. Wenn schon geht das nur irgendwie über P/Invoke (sprich: Win-API).
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Uff... ich sehe, ich habe die Frage vielleicht missverständlich gestellt.
Mit "wie prüfe ich, ob eine Datei gelöscht werden darf?" meine ich "darf" im Sinne von Berechtigung.
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
@NitramX:
Das ist aber vollkommen unnötig, denn rein Theoretisch kann zwischen der abfrage und dem löschen das Recht geändert sein.
Akzeptiere einfach das bei Dateien fast immer der Weg des abfangens der jeweiligen Exception notwendig ist.
Es gibt keinen echten anderen Weg.
Hallo NitramX
Ich weiß es ist jetzt blödes Meckern, es ist aber keine schöne Lösung Exceptions zu Missbrauchen/Die Anwendung bewusst in eine Exception laufen zu lassen.
ich weiß es ist jetzt blödes Meckern, es ist aber keine schöne Lösung in einer nebenläufigen Umgebung ohne Synchronisation eine Abfrage durchführen zu wollen. Oder um es deutlicher zu sagen: In nebenläufigen Umgebung ohne Synchronisation zu arbeiten, ist echt falsch und buggy. In Bezug auf Dateien erfolgt die Synchronisation nunmal erst im Treiber beim tatsächlichen Zugriff. Das mag man beklagen, aber das ist Fakt. Das zu ignorieren ist prinzipiell um Größenordnungen schlechter, als ein korrekte Lösung mittels Exceptions zu realisieren. Also vergiss bitte die Prüfungen vor dem Zugriff und mach es so, wie es einzig und alleine korrekt ist: Durch das Fangen der Exceptions beim Zugriff.
herbivore
@NitramX:
Das ist aber vollkommen unnötig, denn rein Theoretisch kann zwischen der abfrage und dem löschen das Recht geändert sein.Akzeptiere einfach das bei Dateien fast immer der Weg des abfangens der jeweiligen Exception notwendig ist.
Es gibt keinen echten anderen Weg.
Genau darauf wollte ich hinaus 😃
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden