Laden...

Wie prüft man ob eine Datei gelöscht werden darf mit C#?

Erstellt von NitramX vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.570 Views
N
NitramX Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren
Wie prüft man ob eine Datei gelöscht werden darf mit C#?

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ß

3.430 Beiträge seit 2007
vor 13 Jahren

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

6.911 Beiträge seit 2009
vor 13 Jahren

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!"

N
NitramX Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

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 👍

4.207 Beiträge seit 2003
vor 13 Jahren

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

www.goloroden.de
www.des-eisbaeren-blog.de

N
NitramX Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

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.

6.911 Beiträge seit 2009
vor 13 Jahren

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!"

N
NitramX Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

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.

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

ok - dann haben wir uns missverstanden.

Siehe somit: GetAccessControl-Methode.

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!"

F
10.010 Beiträge seit 2004
vor 13 Jahren

@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.

49.485 Beiträge seit 2005
vor 13 Jahren

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

4.207 Beiträge seit 2003
vor 13 Jahren

@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

www.goloroden.de
www.des-eisbaeren-blog.de