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.