Löschen Sie auf schließen von Dateien
Verwendete Sprache: C#
Theorie:
Ich möchte eine Datei erstellen, mit der Flagge, FileOptions.DeleteOnClose in einen temporären Ordner.
Die Datei erfolgreich erstellt und ich Schreibe dato auf Sie, der nächste Schritt ist, um die Anwendung zu starten im Zusammenhang mit der Datei Verarbeiten.Start(...) und dem Benutzer zu ermöglichen, überprüfen Sie das Dokument, schließlich schließe ich meinen Griff, und das so schnell wie andere Verfahren schließen Sie den Griff, um die temporäre Datei, die Datei ist gelöscht von Betriebssystem.
Mein problem ist, dass andere Prozesse die Datei nicht öffnen, auch für das Lesen, trotz wenn ich FileShare.ReadWrite | FileShare.Löschen, um die sharing-Modus.
Irgendwelche Vorschläge?
InformationsquelleAutor xoreax | 2009-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die anderen Prozesse müssen angeben
FileShare.Delete
beim öffnen desDeleteOnClose
DateiAus der MSDN CreateFile docs:
InformationsquelleAutor Duncan Smart
Prüfen:
Müssen Sie sicherstellen, dass alle Prozesse der öffnung der Datei mit FileShare.ReadWrite und FileShare.Löschen.
Selbst wenn der Schöpfer öffnet mit share-readwrite, wenn ein zweites Programm versucht zu öffnen mit teilen-Lesen, das zweite Programm ist im Grunde sagen will sonst niemand schreiben kann. Aber das erste Programm schon hat, macht damit die zweite öffnen fehlschlägt.
bothie, wird das OS löschen Sie die Datei sofort geschlossen, damit Ihr wieder öffnen würde scheitern.
InformationsquelleAutor paxdiablo
Zu Linux wechseln scnr
Ok, ernsthaft jetzt: Das ist ein Fehler in der Windows-Betriebssystem, das kann nicht wirklich umgangen werden. Jedes Programm, das das öffnen der Datei müssen sich auf andere Programme haben die Datei öffnen, in der gleichen Zeit. Das war ein problem ich habe viele Jahre zurück, als ich noch Windows benutzt als gut. Es reicht nicht, eine Datei zu öffnen und zu sagen: Lassen Sie jemand anderes öffnen Sie diese als gut. Der andere muss auch sagen, dass Sie diese Datei öffnen, auch wenn es bereits geöffnet ist.
Unter Linux, im Gegenteil, das Betriebssystem nicht zulassen, dass jede Datei sperren in Windows nicht auf alle. Hier, wenn eine Datei verwendet wird, indem Sie mehr als ein Programm gleichzeitig, die Programme selbst müssen sicherstellen, dass konkurrierende Zugriffe gesperrt. Darüber hinaus kann auf Linux, können wir einfach die Datei erstellen, stellen Sie sicher, dass der andere Prozess wurde gestartet und die Datei geöffnet und dann die Datei einfach löschen (während es geöffnet ist). Der Dateiname wird dann aus dem Dateisystem entfernt immediatelly, aber die Datei wird immer noch gepflegt, indem Sie die Datei-system-Treiber, bis das Letzte Glied (einschließlich der offenen file-handles) wurden entfernt.
Zurück zu deinem problem: Wie all dies doen ' T work on Windows, kann man zwei andere Ansätze:
Grüße, Bodo
Das ist, weil löschen kann man es, auch wenn es geöffnet ist. So lange, wie jeder braucht, wer es hat einen Griff, es wird schon werden.
InformationsquelleAutor Bodo Thiesen