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.