Pourquoi 7-zip / WinRAR décompresse-t-il les fichiers en fichiers "temporaires" 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 .
Réponses:
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 de l'extension shell?
Si vous entrez un dossier de destination, puis sélectionnez la fonction d'extraction ou utilisez l'extension shell, ils ne sont pas d'abord extraits dans un dossier temporaire, ils sont extraits directement vers la destination.
Si vous sélectionnez les fichiers dans l'interface utilisateur et que vous 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. Toutefois, si vous ne faites que faire glisser les fichiers, le programme ne sait pas où se trouve le dossier cible en raison du fonctionnement de la fonction glisser-déposer de OLE . En d'autres termes, c'est Explorerqui 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 est extrait, puis vous voyez la boîte de dialogue des 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.
la source
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.
La pagination dans ces circonstances 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 continuent d'être ajoutés), mais également parce que le fichier est en cours de décompression, il est en train de vérifier les erreurs et ainsi de suite. 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 s'il le juge approprié.
la source
La raison est plus simple que vous ne le pensez: de nombreux programmes décompactent les fichiers à% temp%, c'est que le système de fichiers de destination n'a peut-être pas assez d'espace disque.
Vous savez peut- être que votre système de fichiers dispose peut-être de suffisamment d'espace, mais pas l'application. Que se passe-t-il si ce système de fichiers est utilisé par le système d'exploitation ou une autre application et se remplit lors de la décompression?
Les développeurs partent du principe que% temp% dispose d'un espace "illimité", contrairement à votre destination.
la source
N'étant pas un développeur 7-zip ou WinRAR, mes commentaires ici sont purement spéculatifs. Cela dit, utiliser l’espace temporaire pour décompresser jusqu’à ce que tout soit terminé permet de vérifier que tous les fichiers sont intacts (c’est-à-dire que le zip n'est pas corrompu).
Il n’ya rien de pire que de décompresser un fichier compressé volumineux, ayant commencé à travailler sur des fichiers au début de l’archive; seulement pour découvrir que quelque chose est corrompu à la fin de l'archive. À ce stade, vous perdez confiance en tout.
Mon dernier commentaire est que je ne me souviens pas avoir vu ce comportement de 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 au fur et à mesure qu'ils sont décompressés. Avez-vous vérifié que ce n'est pas un réglage quelque part?
la source