¿Por qué 7-zip / WinRAR descomprime archivos en "temp" antes de moverlos a su destino?
No veo ninguna ventaja contra simplemente descomprimir directamente al destino. Es realmente irritante, especialmente para archivos grandes (¡como lo es ahora!).
Editar:
Por favor explique por qué no se hacen en su lugar .
Respuestas:
¿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.
fuente
Se hace para que los requisitos de memoria para la descompresión se mantengan al mínimo.
Si no usaran el sistema de archivos, la descompresión ocurriría en la memoria. En condiciones de poca memoria, o para archivos comprimidos grandes, tarde o temprano agotaría la memoria disponible y comenzaría el proceso de paginación de memoria.
La paginación en estas circunstancias sería mucho más lenta que simplemente usar el sistema de archivos porque el archivo todavía se está descomprimiendo (y los archivos de página se siguen agregando), pero también porque a medida que el archivo se descomprime, se comprueba si hay errores y existe como tal muchas operaciones de lectura / escritura. Lo peor que le puede pasar a un archivo de página.
EDITAR: Con respecto al uso de un directorio temporal, es necesario seguir muchas pautas del sistema operativo. Si la descompresión falla, no hay garantía de que el programa que realiza la operación se limpie después de sí mismo. Puede haber fallado por ejemplo. Como tal, no queda ningún archivo residual en su directorio de destino y el sistema operativo eliminará el archivo temporal cuando lo considere apropiado.
fuente
La razón es más simple de lo que piensas: muchos programas descomprimen archivos en% temp%, es que el sistema de archivos de destino podría no tener suficiente espacio.
Ahora, puede saber que su sistema de archivos puede tener suficiente espacio, sin embargo, la aplicación no lo tiene. ¿Qué pasa si ese sistema de archivos está en uso por el sistema operativo u otra aplicación y se llena mientras se descomprime?
Los desarrolladores suponen que% temp% tiene espacio "ilimitado", mientras que su destino no.
fuente
No siendo un desarrollador de 7-zip o WinRAR, mis comentarios aquí son puramente especulativos. Dicho esto, usar el espacio temporal para descomprimir hasta que todo esté completo ayuda a verificar que todos los archivos estén intactos (es decir, que el archivo zip no está dañado).
No hay nada peor que desempaquetar un archivo comprimido grande, haber comenzado a trabajar en archivos al comienzo del archivo; solo para descubrir que algo está dañado al final del archivo. En ese punto, pierdes la confianza en todo.
Mi último comentario es que no recuerdo haber visto este comportamiento en 7-zip. Cuando hago clic derecho y digo extraer aquí, generalmente tengo acceso a los archivos a medida que se descomprimen. ¿Has comprobado que no es un escenario en alguna parte?
fuente