Was ist der Vorteil des Schreibens an einen temporären Speicherort und des anschließenden Kopierens an den vorgesehenen Speicherort?


47

Ich schreibe eine Anwendung, die mit Satellitenbildern funktioniert, und mein Chef hat mich gebeten, mir einige der kommerziellen Anwendungen anzusehen und zu sehen, wie sie sich verhalten. Ich fand ein seltsames Verhalten und fand es dann beim Suchen auch in anderen Standardanwendungen.

Diese Programme schreiben zuerst in den temporären Ordner und kopieren ihn dann an das vorgesehene Ziel.

Beispiel: 7zip extrahiert zuerst in den temporären Ordner und kopiert dann die extrahierten Daten an den Speicherort, an den Sie sie aufgefordert haben, die Daten zu extrahieren.

Ich sehe einige Probleme mit diesem Ansatz:

  1. Der temporäre Ordner verfügt möglicherweise nicht über genügend Speicherplatz, während der beabsichtigte Speicherort möglicherweise über so viel Speicherplatz verfügt.

  2. Wenn es sich um eine große Datei handelt, kann der Kopiervorgang einen nicht zu vernachlässigenden Zeitraum in Anspruch nehmen.

Ich habe viel darüber nachgedacht, aber ich konnte keinen einzigen positiven Punkt dafür erkennen. Vermisse ich etwas oder hat das einen wirklichen Vorteil?


Wenn die Anwendung es erfordert, tun Sie es. Ansonsten mach was Sinn macht. Ihr Gehirn sagt Ihnen, dass es in diesem Fall nicht benötigt wird. Ich bin im Lager, um so wenig Arbeit wie möglich zu erledigen, wie Sie anhand meiner Antwort sehen können. Ich empfehle daher, so wenig Arbeit wie möglich für die App zu erledigen.
Jason Sebring

1
Sind Sie sicher, dass die Datei "kopiert" und nicht "verschoben" wird? Großer Unterschied.
Frankc

Von blogs.rsa.com/... , für malwares, der Vorteil ist , 1) garantiert die Beschreibbarkeit vermeidet „red Fehler“ Erkennung , bevor Sie sogar vollständig das Virus auf den Computer des Benutzers heruntergeladen haben 2) TEMP Platten sind in der Regel schneller (RAMDisk) reduziert Zeit für Erkennung, während sich der Virus noch im Download-Stadium befindet (sobald der Virus vollständig gebildet ist und für 0,05 Sekunden ausgeführt werden kann, ist das Spiel beendet, und es ist ein Rennen der Zeit)
Pacerier

3) Während Sie noch herunterladen oder ausführen, können Sie mit einer Wahrscheinlichkeit von x% rechnen, dass das Betriebssystem oder der Benutzer Ihnen versehentlich beim Löschen helfen wird, wenn ein Antivirus in Sie eingeschlagen ist (selbst, ohne es zu wissen, manchmal) und Ihre Knochen herumliegen lässt Ihre toten Knochen werden zwar aus dem TEMP-Ordner gelöscht, dies hilft jedoch, die Erkennungswahrscheinlichkeit zu verringern.
Pacerier

Antworten:


95

Ein paar Gründe, die mir einfallen:

  • Auf den meisten Plattformen sind Dateiverschiebungen atomar, Dateischreibvorgänge jedoch nicht (insbesondere, wenn Sie nicht alle Daten auf einmal schreiben können). Wenn Sie also das typische Produzenten- / Konsumentenmuster haben (ein Prozess erzeugt Dateien, der andere überwacht ein Verzeichnis und nimmt alles auf, was er findet), schreiben Sie zuerst in einen temporären Ordner und verschieben Sie ihn dann an den tatsächlichen Speicherort, sodass der Konsument niemals einen sehen kann unvollendete Datei.
  • Wenn der Vorgang, bei dem die Datei geschrieben wird, zur Hälfte abbricht, befindet sich eine beschädigte Datei auf Ihrer Festplatte. Wenn es sich an einem realen Ort befindet, müssen Sie selbst dafür sorgen, dass es bereinigt wird. Wenn es sich jedoch an einem temporären Ort befindet, kümmert sich das Betriebssystem darum.
  • Wenn die Datei zufällig erstellt wird, während ein Sicherungsjob ausgeführt wird, nimmt der Job möglicherweise eine unvollständige Datei auf. temporäre Verzeichnisse sind in der Regel von Sicherungen ausgeschlossen, sodass die Datei nur enthalten ist, wenn sie an den endgültigen Speicherort verschoben wurde.
  • Das temporäre Verzeichnis befindet sich möglicherweise in einem schnellen, aber flüchtigen Dateisystem (z. B. einer Ramdisk). Dies kann hilfreich sein, wenn Sie mehrere Teile derselben Datei gleichzeitig herunterladen oder die Datei direkt mit vielen Suchvorgängen verarbeiten. Temporäre Verzeichnisse verursachen in der Regel mehr Fragmentierung als Verzeichnisse mit weniger häufigen Lese-, Schreib- und Löschvorgängen. Wenn Sie das temporäre Verzeichnis auf einer separaten Partition belassen, kann dies dazu beitragen, die Fragmentierung der anderen Partitionen gering zu halten.

TL; DR - Hauptsächlich geht es um Atomarität, das heißt, Sie möchten es so gestalten, dass die Datei (am endgültigen Speicherort) entweder vollständig oder zu einem bestimmten Zeitpunkt überhaupt nicht vorhanden ist.


12
Wenn sich das temporäre Verzeichnis auf einer separaten Partition befindet, verlieren Sie die Atomizität.
Yfeldblum

16
Einige Programme extrahieren / kopieren in das vorgesehene Verzeichnis, verwenden jedoch eine temporäre Dateierweiterung (z. B. .tmp) und benennen diese nach Abschluss um.
Dan Diplo

5
Manchmal ist das Schreiben in eine temporäre Datei auch nützlich, wenn mehrere Instanzen Ihres Programms versuchen könnten, dieselbe Datei gleichzeitig hochzuladen, und Sie sich nicht darauf verlassen können, dass das Dateisystem die richtige Sperrstufe bietet (wie z. B. schlecht definierte Cloud-Speicher-API). . Durch die Verwendung einer temporären Datei wird sichergestellt, dass die resultierende Datei nicht mit einer Mischung von Daten aus beiden Uploads endet. Natürlich ist dies nur ein weiterer Fall von Atomizität.
Krzysztof Kozielczyk

1
Der Fall von Dan Diplo ist nützlich, wenn eine vorhandene Datei aktualisiert wird. Sie möchten das alte erst ersetzen, wenn das neue erfolgreich geschrieben wurde, damit das Schreiben des neuen nicht fehlschlägt oder etwas anderes das neue liest, bevor es vollständig geschrieben ist.
RalphChapin

1
Leider sind die OS Temp-Ordner mit alten Dateien und Ordnern übersät, da das Betriebssystem sie nicht aufräumt! Also sollten wir als Entwickler trotzdem aufräumen! superuser.com/questions/296824/...
markmnl

15

Dies scheint ein Problem in Windows zu sein, insbesondere im Zusammenhang mit der Verwaltung von Drag & Drop.

Die Entwickler des WINSCP- Clients haben eine eigene Shell-Erweiterung entwickelt, die dieses Drag-Drop-Verhalten außer Kraft setzt und das sofortige Ablegen der Datei in den richtigen Ordner ermöglicht. Sie erklären den Trick in ihrer Dokumentation und, was noch interessanter ist, was das Problem ist und wie sie es gelöst haben.

Hier ist der interessante Teil:

Mithilfe der Windows-Drag & Drop-Mechanik kann die Quellanwendung des Drag & Drop-Vorgangs nicht auf einfache Weise ermitteln, wo die Dateien abgelegt werden. Es ist Aufgabe der Zielanwendung (normalerweise Windows Explorer), Dateien an das Ziel zu übertragen. Es ist ziemlich vernünftig, da die Quellanwendung kaum Dateien an alle möglichen Ziele übertragen kann. Denken Sie daran, dass Sie Dateien nicht nur in ein Verzeichnis, sondern auch in eine ZIP-Datei (oder ein anderes Archiv), ein entferntes Verzeichnis (über FTP, SFTP, SCP usw.), einen Papierkorb usw. ablegen können.

Selbst der Windows Explorer (oder eine andere Zielanwendung wie WinZip) kann offensichtlich keine Dateien von einer möglichen Quelle herunterladen (insbesondere kennt er SFTP / SCP nicht).

Speziell für 7Zip: Der Benutzer ray023 beantwortet diese Frage im SuperUser-Stapel unter Fragen und Antworten: https://superuser.com/a/422463

Wenn Sie Ihre Datei nicht per Drag & Drop ablegen, sondern die in 7-ZIP und Winrar verfügbare Methode "Hier extrahieren" verwenden, werden die Dateien direkt in das richtige Verzeichnis extrahiert.


2
Die Frage war nicht "Warum verwendet 7zip temporäre Dateien?" Die eigentliche Frage lautete: "Warum werden temporäre Dateien häufig in der Softwareentwicklung verwendet?"
Phil

@Phil Das gegebene Beispiel ist, soweit ich weiß, was passiert, wenn Sie eine Datei aus einem Archiv in einen Ordner auf dem System ziehen, ohne explizit zu fragen, ob sie "extrahiert" werden soll. Doch ich wieder lesen die Frage, und ja, ich glaube , Sie haben Recht, dass der Autor mehr über den Nutzen der temporären Ordner wissen wollte, was übrigens masterfuly von tdammers beantwortet wurde (+1 auch von mir abgestimmt)
Jalayn

Während Ihre Antwort nicht genau das war, wonach ich suchte, +1, um mein Problem mit
7zip zu lösen

1
Ein guter Kommentar lautet im Grunde genommen: Warum verwendet ein Programm einen temporären Ordner? Denn beim Ziehen und Ablegen kennt es den Zielordner nicht und gibt ihn nur an Windows weiter. Dann übernimmt Windows und legt die Datei an der richtigen Stelle ab.
Pieter B

0

Wenn Sie irgendeine Art von Datenverarbeitung an der Datei vornehmen müssen (dekodieren / konvertieren / etc ..), ist es besser, eine temporäre Datei zu verwenden und das Ergebnis nach Abschluss und nur dann an das endgültige Ziel zu übertragen.

Leistungen:

  1. Nur fertige Dateien erreichen das Ziel
  2. Temporäre Dateien können (sollten) sich auf schnellen Medien befinden
  3. Vermeiden Sie eine Fragmentierung der endgültigen Datei
  4. Ermöglicht die Verwendung anderer Medien als Endziel (FTP, Cloud, was auch immer)
  5. Abgebrochene temporäre Dateien sind einfacher zu bereinigen

Ich sehe keine wirklichen Vorteile, wenn ich während der Verarbeitung der Daten direkt an das Ziel schreibe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.