web-dev-qa-db-fra.com

Pourquoi 7-Zip / WinRAR décompresse-t-il les fichiers avant de les déplacer vers leur destination?

Pourquoi 7-Zip/WinRAR décompresse-t-il les fichiers avant de les déplacer vers leur destination?

Je ne vois aucun avantage par rapport à la décompression directe vers la destination. C'est vraiment irritant, surtout pour les gros fichiers (comme maintenant!).


Modifier:

S'il vous plaît expliquer pourquoi ils ne sont pas faits en place .

49
user69835

Comment extrayez-vous exactement les fichiers? Utilisez-vous la ligne de commande ou l'interface graphique? Faites-vous glisser les fichiers ou les sélectionnez-vous et utilisez-vous la fonction d'extraction? Utilisez-vous le menu contextuel Shell-extension?

Si vous entrez un dossier de destination, puis sélectionnez la fonction d’extrait ou utilisez l’extension Shell, ils n’extraient pas d’abord dans un dossier temporaire; ils s’extraient directement dans la destination.

Si vous sélectionnez les fichiers dans l'interface utilisateur et que les faites glisser dans le dossier cible, il sera extrait dans un dossier temporaire.

La raison en est la façon dont la destination est sélectionnée. Si vous entrez dans le dossier cible ou utilisez l'élément de menu contextuel, le programme sait exactement où il doit extraire. Cependant, si vous faites simplement glisser les fichiers, alors, en raison de la fonction de glisser-déposer de OLE , le programme ne sait pas où le dossier cible est. En d'autres termes, c'est l'explorateur qui reçoit le dossier cible, pas le programme d'archivage. En conséquence, le programme ne peut pas savoir où les extraire, il les extrait donc simplement dans le dossier temporaire, puis Explorer les déplace une fois que c'est fait. Vous pouvez le voir clairement en extrayant un gros fichier en utilisant les deux méthodes. Lorsque vous le faites glisser dans un dossier, il s’en extrait, puis vous voyez la boîte de dialogue relative aux opérations de fichier standard d’Explorer le déplacer dans le dossier. Si vous spécifiez le dossier et cliquez sur Extraire, il est extrait et aucun traitement supplémentaire n'est effectué.

N'hésitez pas à parcourir le code source de 7-Zip pour voir comment l’emplacement d’extraction est géré.


J'ai appris cela à la dure, il y a plusieurs années, lorsque je voulais implémenter le glisser-déposer dans un programme que j'écrivais.

82
Synetech

C'est fait pour que les besoins en mémoire pour la décompression soient réduits au minimum.

S'ils n'utilisaient pas le système de fichiers, la décompression se produirait en mémoire. Dans des conditions de mémoire insuffisante ou pour des fichiers compressés volumineux, cela épuiserait tôt ou tard la mémoire disponible et lancerait le processus de pagination de la mémoire.

Dans ces circonstances, la pagination serait beaucoup plus lente que d'utiliser simplement le système de fichiers car le fichier est toujours en cours de décompression (et les fichiers de page ne cessent d'être ajoutés), mais également parce que le fichier est en cours de décompression, des erreurs sont détectées. beaucoup d'opérations de lecture/écriture. La pire chose qui puisse arriver à un fichier de page.

EDIT: En ce qui concerne l’utilisation d’un répertoire temporaire, il convient de suivre les directives de nombreux systèmes d’exploitation. Si la décompression échoue, rien ne garantit que le programme effectuant l'opération nettoie après lui-même. Il peut avoir planté par exemple. En tant que tel, il ne reste aucun fichier résiduel dans votre répertoire cible et le système d'exploitation supprimera le fichier temporaire lorsqu'il le jugera utile.

1
A Dwarf