Werden wir jemals eine geöffnete Datei in Windows löschen können?

9

Disclaimer: Ich bin hauptsächlich ein Linux / Web Entwickler.

Windows hat dieses "nette" Feature, bei dem es die Berechtigung verweigert, Dateien zu löschen, die von einem Prozess offengehalten werden. Wenn also ein Antivirenprogramm zur falschen Zeit die falsche Datei aufruft, kann es passieren, dass ein zufälliges Programm sich falsch verhält und möglicherweise abstürzt.

Habe ich Recht? Gibt es Pläne, das zu beheben?

Findet jemand von Ihnen das akzeptabel oder, wie könnte es zu dieser Zeit vielleicht eine gute Idee sein?

Bearbeiten:

Es funktioniert sehr unterschiedlich auf Unix, und das schon seit Jahrzehnten.

Als ein Beispiel:

  • process 1 öffnet foo.txt, zum Lesen oder Schreiben, oder beides, egal
  • Prozess 2 löscht die Datei
  • Die Datei wurde vom Dateisystem getrennt
  • Prozess 1 liest weiter und / oder schreibt, die Datei ist noch vorhanden und kann so lange wachsen, wie noch Platz auf der Festplatte ist. Es ist einfach nicht von anderen Prozessen erreichbar, die nicht schon einen Dateizugriff darauf haben.
  • Wenn Prozess 1 die Datei schließt, ist sie von keinem Ort aus zugänglich

Tatsächlich ist ein übliches Verwendungsmuster für temporäre Dateien unter Unix: open-remove-read / write-close.

    
Marco Mariani 08.07.2010, 09:41
quelle

2 Antworten

5

Ihre erste Aussage ist nicht korrekt. Windows erlaubt es, offene Dateien zu löschen. Sie müssen nur FILE_SHARE_DELETE angeben und Sie sind fertig. Sorgfältige Programmierer sollten vernünftigerweise entscheiden, ob diese Flagge (oder Teilen zum Lesen / Schreiben) sinnvoll ist und sie weitergeben.

Ein Anti-Virus-Produkt, das Dateien mit vollständiger Freigabe (einschließlich Löschung) nicht öffnet, ist fehlerhaft.

Windows erinnert sich jedoch an das aktuelle Arbeitsverzeichnis eines Prozesses und verhindert, dass es gelöscht wird. Dieses Arbeitsverzeichnis ist unabhängig vom Speicherort aller Dateien, die vom Prozess geöffnet werden.

    
mafu 20.03.2012, 10:30
quelle
0

Das ist absolut akzeptabel. Stellen Sie sich eine Situation vor, in der Sie eine Datenbankdatei in Ihrer Anwendung lesen, und eine andere Anwendung kommt mit und löscht diese Datenbankdatei von rechts unter Ihnen. Woher weiß Ihre Anwendung, ob die Datei noch existiert? Wie stellt es sicher, dass der Dateistrom nicht plötzlich versucht, diese Datei zu lesen, kann es eine Millisekunde geben, aber nicht die nächste? Aus diesem Grund können Programme Dateien sperren, um sicherzustellen, dass die Datei immer da ist, bis das Programm feststellt, dass sie damit fertig ist.

Es könnte hilfreicher sein, uns zu sagen, warum diese Dateisperrung in Ihrer Situation unerwünscht ist. Ich bin mir ziemlich sicher, dass Antivirenprogramme Dateien optimistisch sperren, es sei denn, sie bereinigen sie.

    
Daniel T. 08.07.2010 09:48
quelle

Tags und Links