J'écris une application qui fonctionne avec des images satellites, et mon patron m'a demandé de regarder certaines des applications commerciales et de voir comment elles se comportent. J'ai trouvé un comportement étrange, puis en le regardant, je l'ai également trouvé dans d'autres applications standard.
Ces programmes écrivent d'abord dans le dossier temporaire, puis le copient vers la destination prévue.
Exemple: 7Zip extrait d'abord dans le dossier temporaire, puis copie les données extraites à l'emplacement où vous lui aviez demandé d'extraire les données.
Je vois plusieurs problèmes avec cette approche:
Le dossier temporaire peut ne pas avoir suffisamment d'espace, tandis que l'emplacement prévu peut avoir autant d'espace.
S'il s'agit d'un fichier volumineux, l'opération de copie peut prendre un temps non négligeable.
J'y ai beaucoup réfléchi, mais je ne voyais pas un seul point positif à faire cela. Suis-je en train de manquer quelque chose ou y a-t-il un réel avantage à le faire?
Quelques raisons auxquelles je peux penser:
TL; DR - cela se résume principalement à l'atomicité, c'est-à-dire que vous voulez faire en sorte que (à l'emplacement final) le fichier soit complet ou pas là du tout à un moment donné.
Cela semble être un problème dans Windows, plus spécifiquement lié à la gestion du glisser-déposer.
Les développeurs du client WINSCP ont développé leur propre extension Shell, qui remplace ce comportement de glisser-déposer et permet de déposer le fichier dans le bon dossier immédiatement. Ils expliquent l'astuce dans leur documentation et, plus intéressant, quel est le problème et comment ils l'ont résolu.
Voici la partie intéressante:
La mécanique de glisser-déposer de Windows ne permet pas à l'application source de l'opération de glisser-déposer de savoir facilement où les fichiers sont déposés. C'est à l'application cible (Windows Explorer en général) de transférer les fichiers vers la destination. C'est plutôt raisonnable, car l'application source peut difficilement transférer des fichiers vers toutes les destinations possibles. Gardez à l'esprit que vous pouvez déposer des fichiers non seulement dans un répertoire, mais même dans un fichier Zip (ou toute autre archive), un répertoire distant (via FTP, SFTP, SCP,…), une corbeille,…
De toute évidence, même l'Explorateur Windows (ou toute autre application cible, comme WinZip) ne peut pas télécharger de fichiers à partir d'une source possible (en particulier, il ne connaît pas SFTP/SCP).
En outre, spécifiquement pour 7Zip: l'utilisateur ray023 répond à cette question dans le SuperUser Stack Q&A: https://superuser.com/a/42246
Fondamentalement, si au lieu de glisser-déposer votre fichier, vous utilisez la méthode "extraire ici" disponible dans bith 7-Zip et Winrar, les fichiers sont directement extraits dans le bon répertoire.
Si vous devez effectuer tout type de traitement de données dans le fichier (décoder/convertir/etc.), il est préférable d'utiliser un fichier temporaire et une fois terminé, et seulement s'il est terminé, de transférer le résultat vers la destination finale.
Avantages:
Je ne vois pas de réels avantages d'écrire directement vers la destination lors du traitement des données.