¿Cómo exactamente extraes los archivos? ¿Estás utilizando la línea de comandos o la GUI? ¿Está arrastrando los archivos o seleccionándolos y utilizando la función de extracción? ¿Está utilizando el menú contextual de la extensión de shell?
Si ingresa una carpeta de destino y luego selecciona la función de extracción o utiliza la extensión de shell, entonces no se extraen primero a una carpeta temporal, sino que se extraen directamente al destino.
Si selecciona los archivos de la interfaz de usuario y arrastra a la carpeta de destino, entonces se va a extraer en una carpeta temporal.
La razón está en cómo se selecciona el destino. Si ingresa a la carpeta de destino o utiliza el elemento del menú contextual, el programa sabrá exactamente dónde debe extraerlo. Sin embargo, si simplemente arrastra los archivos, debido a cómo funciona la función de arrastrar y soltar de OLE , el programa no sabe dónde está la carpeta de destino. En otras palabras, es Explorerque recibe la carpeta de destino, no el programa de archivo. Como resultado, el programa no puede saber dónde extraerlos, por lo que simplemente los extrae a la carpeta temporal, luego Explorer los mueve una vez hecho. Puede ver esto claramente extrayendo un archivo grande utilizando ambos métodos. Cuando lo arrastra a una carpeta, se extrae, luego ve el cuadro de diálogo de operación de archivos estándar de Explorer moviéndolo a la carpeta. Si especifica la carpeta y hace clic en Extraer, se extrae y no se realiza ningún procesamiento adicional.
Siéntase libre de leer el código fuente de 7-Zip para ver cómo se maneja la ubicación de extracción.
Aprendí esto de la manera difícil hace varios años cuando quería implementar arrastrar y soltar en un programa que estaba escribiendo.