61 votes

Pourquoi 7-zip / WinRAR décompressent-ils les fichiers vers "temp" avant de les déplacer vers leur destination ?

Pourquoi 7-zip / WinRAR décompressent-ils les fichiers vers "temp" avant de les déplacer vers leur destination ?

Je ne vois pas d'avantage à dézipper directement vers la destination. C'est vraiment irritant, surtout pour les gros fichiers (comme c'est le cas maintenant !).


編集する。

Veuillez expliquer pourquoi ils ne sont pas faits en place .

101voto

Ben Collins Points 11318

Comment faites-vous exactement pour extraire 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'extraction ou utilisez l'extension Shell, alors elles ne pas extraient d'abord dans un dossier temporaire, ils extraient directement vers la destination.

Si vous sélectionnez les fichiers dans l'interface utilisateur et que draguer vers le dossier cible, puis il sera extraire dans un dossier temporaire.

La raison réside dans la manière dont la destination est sélectionnée. Si vous saisissez le dossier cible ou utilisez l'élément du menu contextuel, le programme sait exactement où il doit extraire. Cependant, si vous faites simplement glisser les fichiers, la fonction de glisser-déposer de OLE fonctionne, le programme ne sait pas où se trouve le dossier cible. En d'autres termes, il est Explorer qui reçoit le dossier cible, et non le programme d'archivage. En conséquence, le programme ne peut pas savoir où les extraire, et se contente donc de les extraire dans le dossier temporaire, puis l'Explorer les déplace une fois qu'il a terminé. Vous pouvez le constater clairement en extrayant un gros fichier à l'aide des deux méthodes. Lorsque vous le faites glisser vers un dossier, il s'extrait, puis la boîte de dialogue d'opération de fichier standard d'Explorer le déplace vers le dossier. Si vous spécifiez le dossier et cliquez sur Extraire, le fichier est extrait et aucun autre traitement n'est effectué.

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

Je l'ai appris à mes dépens il y a plusieurs années, lorsque j'ai voulu mettre en œuvre le glisser-déposer dans un programme que j'écrivais.

2voto

PuppetMaster Points 11

Cela permet de réduire au minimum les besoins en mémoire pour la décompression.

S'ils n'utilisaient pas le système de fichiers, la décompression se ferait en mémoire. Dans des conditions de faible mémoire, ou pour de gros fichiers compressés, 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 l'utilisation du système de fichiers, car le fichier est toujours en cours de décompression (et des fichiers de pagination continuent d'être ajoutés), mais aussi parce qu'au fur et à mesure que le fichier est décompressé, il est vérifié pour des erreurs et il y a donc beaucoup d'opérations de lecture/écriture. La pire chose qui puisse arriver à un fichier de pages.

EDIT : En ce qui concerne l'utilisation d'un répertoire temporaire, il s'agit de suivre les directives de nombreux systèmes d'exploitation. Si la décompression échoue, il n'y a aucune garantie que le programme effectuant l'opération nettoie après lui. Il peut avoir planté par exemple. Ainsi, aucun fichier résiduel ne reste dans votre répertoire cible et le système d'exploitation se débarrassera du fichier temporaire quand il le jugera approprié.

-1voto

Keltari Points 67159

La raison est plus simple que vous ne le pensez : De nombreux programmes décompressent les fichiers dans %temp%, c'est que le système de fichiers de destination peut ne pas avoir assez d'espace.

Maintenant, vous pourriez connaître que votre système de fichiers peut avoir suffisamment d'espace, mais que l'application n'en a pas. Que se passe-t-il si ce système de fichiers est utilisé par le système d'exploitation ou une autre application et qu'il se remplit pendant la décompression ?

Les développeurs partent du principe que %temp% a un espace "illimité", alors que votre destination n'en a pas.

-2voto

Kirk Points 2302

N'étant pas un développeur de 7-zip ou de WinRAR, mes commentaires ici sont purement spéculatifs. Cela étant dit, l'utilisation d'un espace temporaire pour décompresser jusqu'à ce que tout soit complet permet de vérifier que tous les fichiers sont intacts (c'est-à-dire que le zip n'est pas corrompu).

Il n'y a rien de pire que de déballer un gros fichier compressé, d'avoir commencé à travailler sur des fichiers au début de l'archive, pour se rendre compte que quelque chose est corrompu à la fin de l'archive. À ce moment-là, vous perdez confiance en tout.

Mon dernier commentaire est que je ne me rappelle pas avoir vu ce comportement chez 7-zip. Lorsque je clique avec le bouton droit de la souris et que je dis "extraire ici", j'ai généralement accès aux fichiers lors de leur décompression. Avez-vous vérifié que ce n'est pas un paramètre quelque part ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X