Estoy escribiendo una aplicación que funciona con imágenes satelitales, y mi jefe me pidió que mirara algunas de las aplicaciones comerciales y ver cómo se comportan. Encontré un comportamiento extraño y luego, mientras lo buscaba, también lo encontré en otras aplicaciones estándar.
Estos programas primero escriben en la carpeta temporal y luego la copian en el destino deseado.
Ejemplo: 7zip primero extrae en la carpeta temporal, y luego copia los datos extraídos a la ubicación en la que le había pedido que extraiga los datos.
Veo varios problemas con este enfoque:
Es posible que la carpeta temporal no tenga suficiente espacio, mientras que la ubicación prevista podría tener tanto espacio.
Si se trata de un archivo grande, la operación de copia puede llevar un tiempo no despreciable.
Lo pensé mucho, pero no pude ver un solo punto positivo para hacer esto. ¿Me estoy perdiendo algo o hay un beneficio real al hacerlo?
fuente
Respuestas:
Algunas razones que se me ocurren:
TL; DR: se reduce principalmente a la atomicidad, es decir, desea hacerlo para que (en la ubicación final) el archivo esté completo o no esté allí en ningún momento dado.
fuente
Esto parece ser un problema en Windows, más específicamente relacionado con la forma en que se gestiona la operación de arrastrar y soltar.
Los desarrolladores del cliente WINSCP han desarrollado su propia extensión de shell, que anula este comportamiento de arrastrar y soltar y permite colocar el archivo en la carpeta correcta de inmediato. Explican el truco en su documentación y, más interesante, cuál es el problema y cómo lo resolvieron.
Esta es la parte interesante:
Además, específicamente para 7Zip: el usuario ray023 responde a esta pregunta en las Preguntas y respuestas de SuperUser Stack: https://superuser.com/a/422463
Básicamente, si en lugar de arrastrar y soltar su archivo utiliza el método "extraer aquí" disponible en 7-ZIP y Winrar, los archivos se encuentran directamente en el directorio correcto.
fuente
Si tiene que hacer algún tipo de procesamiento de datos en el archivo (decodificar / convertir / etc.), entonces es mejor usar un archivo temporal y cuando se complete, y solo si se completa, transferir el resultado al destino final.
Beneficios:
No veo beneficios reales de escribir directamente al destino mientras proceso los datos.
fuente