Warum dekomprimiert 7-zip / WinRAR Dateien auf "Temp", bevor sie an ihren Zielort verschoben werden?

50

Warum entpackt 7-zip / WinRAR Dateien auf "temp", bevor sie an ihren Zielort verschoben werden?

Ich sehe keinen Vorteil gegenüber dem direkten Entpacken zum Ziel. Es ist wirklich irritierend, besonders bei großen Dateien (wie es jetzt ist!).


Bearbeiten:

Bitte erklären , warum sie nicht fertig sind , an Ort und Stelle .

Stevoisiak
quelle
3
Wenn Sie `` als temporären Ordner in WinRAR angeben, sollte er direkt in das Ziel extrahiert werden.

Antworten:

82

Wie genau extrahieren Sie die Dateien? Verwenden Sie die Befehlszeile oder die GUI? Ziehen Sie die Dateien oder wählen Sie sie aus und verwenden Sie die Extraktionsfunktion? Verwenden Sie das Kontextmenü der Shell-Erweiterung?

Wenn Sie einen Zielordner eingeben und dann die Extraktionsfunktion auswählen oder die Shell-Erweiterung verwenden, werden diese zuerst nicht in einen temporären Ordner extrahiert, sondern direkt in den Zielordner.

Wenn Sie die Dateien in der Benutzeroberfläche und wählen Sie ziehen sie in den Zielordner, dann wird in einen temporären Ordner extrahieren.

Der Grund liegt in der Auswahl des Ziels. Wenn Sie den Zielordner eingeben oder den Kontextmenüpunkt verwenden, weiß das Programm genau, wohin es extrahieren muss. Wenn Sie jedoch nur die Dateien ziehen, weiß das Programm aufgrund der Drag & Drop-Funktion von OLE nicht, wo sich der Zielordner befindet. Mit anderen Worten, es ist ExplorerDas empfängt den Zielordner, nicht das Archivierungsprogramm. Infolgedessen kann das Programm nicht wissen, wo sie extrahiert werden sollen, und extrahiert sie einfach in den temporären Ordner. Anschließend werden sie vom Explorer verschoben. Sie können dies deutlich sehen, indem Sie eine große Datei mit beiden Methoden extrahieren. Wenn Sie es in einen Ordner ziehen, wird es extrahiert. Anschließend wird das Standarddialogfeld für Dateivorgänge von Explorer angezeigt, in dem es in den Ordner verschoben wird. Wenn Sie den Ordner angeben und auf Extrahieren klicken, wird er extrahiert und keine weitere Verarbeitung durchgeführt.

Lesen Sie den Quellcode für 7-Zip, um zu sehen, wie mit dem Extraktionsort umgegangen wird.


Das habe ich vor einigen Jahren auf die harte Tour gelernt, als ich Drag-and-Drop in einem Programm implementieren wollte, das ich gerade schrieb.

Synetech
quelle
7
Absolut genial - danke dafür! Das hat mich jahrelang verblüfft, aber ich habe mir nie die Zeit genommen, das "Was" und das "Warum" aufzuspüren. Die seltsamen Male, in denen mein C: temp-Ordner bis zum Rand gefüllt ist, stapfe ich durch Winrars Optionen, um herauszufinden, wo es ist muss zum ersten Extrakt in einen temporären Ordner auf C eingestellt werden :. Aber ach, ich finde es nicht , dass ich nie die Korrelation zwischen den beiden Methoden verbunden ist , und schätzen nun das Licht :) Danke zu sehen.!
Coldblackice
2
Falsch ist hier, dass der Explorer die Datei nicht verschiebt , sondern kopiert . Das ist sehr irritierend, da das Verschieben sehr schnell ist (außer beim Verschieben von Partition zu Partition) und die ideale Wahl gewesen sein sollte (es verschwendet keinen Speicherplatz), aber die Idioten von Microsoft hielten es für eine großartige Idee, aus dem temporären Ordner zu kopieren Dann lassen Sie einfach die temporären Ordnerdaten herumliegen. Das Extrahieren eines riesigen Archivs wird nicht nur doppelt so viel Speicherplatz in Anspruch nehmen, sondern auch fast doppelt so lange dauern!
ADTC
Sie hatten wahrscheinlich einen guten Grund dafür, und möglicherweise lag es an einer Art Einschränkung der Systeme und / oder DDE, auf denen es basierte, als sie OLE zum ersten Mal entwarfen, in den Tagen von Windows 3; eine Einschränkung, die heute gelten kann oder nicht.
Synetech
1
Ja, es ist lächerlich, besonders auf einer virtuellen Maschine mit begrenztem Speicherplatz. Mit "Entpacken" entpacken Sie ein 8 GB RAR-Archiv mit über 6000 Dateien in ca. 1 Minute. Wenn Sie die Ordner herausziehen, dauert das Entpacken in ein temporäres Verzeichnis genauso lange, aber zusätzlich friert es das Zielfenster ein und kopiert die Dateien für mehr als 15 Minuten mit nur 3 MB / s. Das Kopieren einer Datei auf dasselbe Laufwerk ist besonders langsam (möglicherweise aufgrund des zugrunde liegenden virtuellen Dateisystems), obwohl ich eine Datei von einer anderen virtuellen Maschine mit Hunderten von MB / s über das Netzwerk auf diese Maschine kopieren kann.
Triynko
1
Ich denke, eine mögliche Abhilfe wäre, eine 0-Byte-Datei mit einem GUID-Namen zu erstellen, dh praktisch unwahrscheinlich, dass sie als doppelter Dateiname auftritt. Überwachen Sie dann die Dateizugriffsnummern von explorer.exe, um festzustellen, wo die Datei kopiert wird. Zum Schluss extrahieren Sie das Archiv zum Ziel.
Zv_oDD
1

Dadurch wird der Speicherbedarf für die Dekomprimierung auf ein Minimum beschränkt.

Wenn sie das Dateisystem nicht verwenden, würde die Dekomprimierung im Speicher erfolgen. Unter Bedingungen mit geringem Arbeitsspeicher oder bei großen komprimierten Dateien würde dies früher oder später den verfügbaren Arbeitsspeicher ausschöpfen und den Prozess des Auslagerns des Arbeitsspeichers starten.

Unter diesen Umständen wäre das Paging viel langsamer als die Verwendung des Dateisystems, da die Datei noch dekomprimiert wird (und Auslagerungsdateien weiterhin hinzugefügt werden), aber auch, weil die Datei beim Dekomprimieren auf Fehler überprüft wird und als solche vorhanden ist viele Lese- / Schreibvorgänge. Das Schlimmste, was einer Auslagerungsdatei passieren kann.

BEARBEITEN: In Bezug auf die Verwendung eines temporären Verzeichnisses wird dies so gehandhabt, dass viele Betriebssystemrichtlinien befolgt werden. Wenn die Dekomprimierung fehlschlägt, gibt es keine Garantie dafür, dass das Programm, das die Operation ausführt, nach sich selbst bereinigt. Es könnte zum Beispiel abgestürzt sein. Als solches verbleibt keine Restdatei in Ihrem Zielverzeichnis und das Betriebssystem wird die temporäre Datei entsorgen, wenn es dies für angemessen hält.

Ein Zwerg
quelle
3
Dies erklärt zwar nicht, warum die Dateien zuerst in ein temporäres Verzeichnis komprimiert und dann in das Zielverzeichnis verschoben werden. Die Operation könnte auch genau dort stattfinden.
Slhck
3
Bearbeitet, um Ihre Frage besser zu reflektieren
Ein Zwerg
4
@Dante, das stimmt nicht. Das Verschieben einer Datei auf derselben Partition ändert einfach den Index der Datei im Dateisystem in das neue Verzeichnis, kopiert keine Daten und dauert nur einen Augenblick. Glaubst du mir nicht? Probieren Sie es aus, schneiden Sie eine Multi-GB-Datei aus einem Ordner aus und fügen Sie sie in einen anderen Ordner ein. es dauert weniger als eine Sekunde. Sie versuchen dasselbe auf einem anderen Laufwerk oder einer anderen Partition. Dauert Minuten.
Dour High Arch
3
Zu "Das Betriebssystem wird die temporäre Datei entsorgen, wenn es dies für angemessen hält": Tut Windows dies jemals ?
Grawity
1
Diese völlig falsche Antwort sollte entfernt werden. 7zip wird während Drag & Drop-Vorgängen nur in einen temporären Ordner dekomprimiert. Dies liegt an den Einschränkungen von Windows. Siehe superuser.com/questions/197961/... für weitere Informationen.
Dss539
-1

Der Grund ist einfacher als Sie denken: Viele Programme entpacken Dateien nach% temp%, weil das Zieldateisystem möglicherweise nicht über genügend Speicherplatz verfügt.

Jetzt wissen Sie möglicherweise , dass Ihr Dateisystem möglicherweise über genügend Speicherplatz verfügt, die Anwendung jedoch nicht. Was ist, wenn dieses Dateisystem vom Betriebssystem oder einer anderen Anwendung verwendet wird und beim Dekomprimieren voll wird?

Entwickler gehen davon aus, dass% temp% über "unbegrenzten" Speicherplatz verfügt, Ihr Ziel jedoch nicht.

Keltari
quelle
Nicht ganz; Das ist kein Grund, das temporäre Verzeichnis zu verwenden. Die Anwendung weiß (oder kann es zumindest), ob genügend Speicherplatz vorhanden ist oder nicht. Erstens weiß der Archivierer genau, wie groß die komprimierten Dateien sind, wenn sie dekomprimiert werden, und kann sie im Voraus zuweisen und dann beim Dekomprimieren ausfüllen. Zweitens ist es ganz einfach, den freien Speicherplatz auf einem Laufwerk abzufragen. Außerdem, wenn nicht genügend Speicherplatz vorhanden ist, wird es dekomprimiert, solange es noch verfügbar ist, und es wird ein Fehler ausgegeben, wenn der Speicherplatz knapp wird.
Synetech
Eigentlich ist das schon die Antwort. Nur weil eine Anwendung den Speicherplatz auf dem Zielziel vorab zuweisen kann, bedeutet dies nicht, dass sie exklusiven Zugriff darauf hat. Die Anwendung kann das Ziel abfragen und prüfen, ob genügend Speicherplatz vorhanden ist. Während dieser Abfrage kann jedoch eine andere Anwendung einen Teil dieses Speicherplatzes belegen, bevor sie Speicherplatz zuweisen kann.
Keltari
Darüber hinaus ist der temporäre Speicherplatz eines Benutzers auf Dateisystemebene an diesen Benutzer gebunden. Wenn ein Absturz oder ein anderer Fehler auftrat, konnte ein anderer Benutzer die temporären Dateien nicht sehen. Das Ziel unterliegt möglicherweise keinen solchen Sicherheitseinschränkungen. Daher ist es sicherer, dass möglicherweise vertrauliche Daten nicht in einem anderen Dateisystem hängen.
Keltari
Wie gesagt, wenn es beim Dekomprimieren ausgeht, wird einfach eine Fehlermeldung ausgegeben. Wie würde das Extrahieren auf ein temporäres Laufwerk das Problem beheben? Wenn nicht genügend Speicherplatz vorhanden ist, ist nicht genügend Speicherplatz vorhanden, nachdem die Dateien auf das temporäre Laufwerk extrahiert wurden. Dadurch werden all diese CPU-Zyklen und Lese- / Schreibvorgänge auf das temporäre Laufwerk verschwendet. Wie ich in meiner Antwort sagte, können Sie den Quellcode für 7-Zip lesen oder Alexander Roshal kontaktieren , um ihn nach WinRAR zu fragen. Außerdem, wie ich auch sagte, wenn Sie das Ziel angeben oder das Kontextmenü verwenden, wird % temp% nicht verwendet.
Synetech
-2

Da ich kein 7-zip- oder WinRAR-Entwickler bin, sind meine Kommentare hier reine Spekulationen. Wenn Sie den temporären Speicherplatz zum Entpacken verwenden, bis alles vollständig ist, können Sie sicherstellen, dass alle Dateien intakt sind (dh, dass die Zip-Datei nicht beschädigt ist).

Es gibt nichts Schlimmeres, als eine große komprimierte Datei zu entpacken, die zu Beginn des Archivs mit der Arbeit an Dateien begonnen hat. nur um herauszufinden, dass etwas am Ende des Archivs beschädigt ist. An diesem Punkt verliert man das Vertrauen in alles.

Mein letzter Kommentar ist, dass ich mich nicht erinnern kann, dieses Verhalten von 7-zip aus gesehen zu haben. Wenn ich mit der rechten Maustaste darauf klicke und hier "Extrahieren" sage, habe ich im Allgemeinen Zugriff auf die Dateien, während sie entpackt werden. Haben Sie überprüft, dass es sich nicht um eine Einstellung handelt?

Kirche
quelle
3. Absatz: Ich kann solche Einstellungen nicht finden und es handelt sich um eine große Menge von Dateien (4G), die ich gerade extrahiert habe. Ich bin mir ziemlich sicher, dass alle 4G-Dateien endlich langsam verschoben wurden.
2. Absatz: Nach "temp" extrahieren verhindert nichts, wenn die komprimierte Datei bereits beschädigt ist.
Es verhindert, dass Sie Dateien aus einer beschädigten Zip-Datei sehen. Die Logik ist, dass Sie nichts sehen, bis alles verifiziert ist. Was die Einstellung angeht, bin ich mir nicht sicher, was ich dir sagen soll. Wenn ich 7-zip anweise, eine große TAR-Datei auf meinen Desktop zu extrahieren, werden die Dateien sofort angezeigt. Dies könnte daran liegen, dass tar kein komprimiertes Format ist.
Kirk
> Die Logik ist, dass Sie nichts sehen, bis alles verifiziert ist. Das ist absurd. Wie würden Sie dann einige Dateien aus einem beschädigten Archiv wiederherstellen? Der Grund, warum Sie es nicht bemerken, ist, dass Sie die Shell-Erweiterung verwendet haben, anstatt die Dateien von der GUI zu ziehen.
Synetech