Pourquoi 7-zip / WinRAR décompose-t-il les fichiers sur "temp" avant de les déplacer vers leur destination?

Pourquoi 7-zip / WinRAR décompose-t-il les fichiers sur "temp" avant de les déplacer vers leur destination?

Je ne vois aucun avantage contre le simple décompte direct vers la destination. C'est vraiment irritant, surtout pour les fichiers volumineux (comme c'est le cas maintenant!).


Modifier:

Expliquez pourquoi ils n'ont pas été mis en place .

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

Si vous entrez un dossier de destination, puis sélectionnez la fonction d'extraction ou utilisez l'extension de shell, puis ne les extrairez pas dans un dossier temporaire d'abord, ils sont extraits directement sur la destination.

Si vous sélectionnez les fichiers dans l'interface utilisateur et faites- les glisser vers le dossier cible, vous l' extrairez dans un dossier temporaire.

La raison en est la façon dont la destination est sélectionnée. Si vous entrez le dossier cible ou utilisez l'élément contextuel, le programme sait exactement où il doit être extrait. Toutefois, si vous faites simplement glisser les fichiers, puisqu'il explique la fonction de glisser-déplacer d' OLE , le programme ne sait pas où se trouve le dossier cible. En d'autres termes, c'est l' Explorateur 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 il suffit de les extraire au dossier temporaire, puis Explorer les déplace une fois qu'il est terminé. Vous pouvez le voir clairement en extrayant un grand fichier en utilisant les deux méthodes. Lorsque vous l'acheminez vers un dossier, il extrait, puis vous voyez la boîte de dialogue de l'opération de fichier standard de l'Explorateur, le transférant dans le dossier. Si vous spécifiez le dossier et cliquez sur Extraire, il extrait et aucun autre traitement n'est effectué.

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

J'ai appris cela de façon difficile il y a plusieurs années lorsque je voulais mettre en place un glisser-déposer dans un programme que j'écrivais.

Cela se fait afin que les exigences de mémoire pour la décompression soient minimisées.

S'ils n'utilisaient pas le système de fichiers, la décompression se produirait dans la mémoire. Dans des conditions de mémoire insuffisantes, ou pour de gros fichiers compressés, cela éviterait tôt ou tard la mémoire disponible et démarrera le processus de pagination de la mémoire.

La pagination dans ces circonstances serait beaucoup plus lente que l'utilisation du système de fichiers car le fichier est encore décompressé (et les fichiers de page restent ajoutés), mais aussi parce que, au fur et à mesure que le fichier est décompressé, il est en train de vérifier les erreurs et il y a tellement Beaucoup d'opérations de lecture / écriture. La pire chose qui peut arriver à un fichier de page.

EDIT: En ce qui concerne l'utilisation d'un répertoire temporaire, il est donc nécessaire de suivre de nombreuses directives système. Si la décompression échoue, rien ne garantit que le programme exécutant l'opération se nettoie après lui-même. Il peut s'être écrasé par exemple. En tant que tel, aucun fichier résiduel ne reste dans votre répertoire cible et le système d'exploitation disposera du fichier temporaire lorsqu'il le jugera approprié.

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

Maintenant, vous pourriez savoir que votre système de fichiers pourrait avoir suffisamment d'espace, mais l'application ne l'est pas. Qu'arrive-t-il si ce système de fichiers est utilisé par le système d'exploitation ou une autre application et se remplit pendant la décompression?

Les développeurs supposent que% temp% a un espace "illimité", alors que votre destination ne l'est pas.

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

Il n'y a rien de pire que de déballer un gros fichier compressé, ayant commencé à travailler sur les fichiers au début de l'archive; Seulement pour savoir 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 souviens pas avoir vu ce comportement à partir de 7-zip. Lorsque je clique avec le bouton droit de la souris et disent extraire ici, j'ai généralement accès aux fichiers lorsqu'ils sont décompressés. Avez-vous vérifié que ce n'est pas un cadre quelque part?