Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie prüft man ob eine Datei gelöscht werden darf mit C#?
NitramX
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: K

Themenstarter:

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

beantworten | zitieren | melden

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ß
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von NitramX am .
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo NitramX,

willkommen bei myCSharp.de
Zitat
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
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,
Zitat
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!"
private Nachricht | Beiträge des Benutzers
NitramX
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: K

Themenstarter:

beantworten | zitieren | melden

Zitat von gfoidl
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:
Zitat
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
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4.207
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
NitramX
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: K

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
NitramX
myCSharp.de - Member



Dabei seit:
Beiträge: 6
Herkunft: K

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.813
Herkunft: Waidring

beantworten | zitieren | melden

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!"
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.972

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo NitramX
Zitat
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
private Nachricht | Beiträge des Benutzers
Golo Roden
myCSharp.de - Member

Avatar #avatar-2167.png


Dabei seit:
Beiträge: 4.207
Herkunft: Riegel am Kaiserstuhl

beantworten | zitieren | melden

Zitat von FZelle
@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
private Nachricht | Beiträge des Benutzers