私は衛星画像で動作するアプリケーションを書いていて、上司から商用アプリケーションのいくつかを見て、それらの動作を確認するように依頼されました。奇妙な振る舞いを見つけ、それを探していたところ、他の標準的なアプリケーションでも同様に見つけました。
これらのプログラムは、最初に一時フォルダーに書き込み、次に目的の宛先にコピーします。
例:7Zipは、最初に一時フォルダーに抽出し、次に、抽出したデータを、データを抽出するように要求した場所にコピーします。
このアプローチにはいくつかの問題があります。
一時フォルダーには十分なスペースがない可能性がありますが、意図した場所にはそれだけのスペースがある可能性があります。
大きなファイルの場合、コピー操作に無視できない時間がかかる可能性があります。
私はそれについてたくさん考えましたが、これを行うための単一の肯定的な点を見ることができませんでした。私は何かを逃していますか、またはこれを行うことには本当にメリットがありますか?
私が考えることができるいくつかの理由:
TL; DR-それは主に原子性に要約されます。つまり、(最終的な場所で)ファイルがいつでも完全であるか、まったく存在しないようにする必要があります。
これはWindowsの問題のようです。具体的には、ドラッグドロップの管理方法に関連しています。
[〜#〜] winscp [〜#〜] クライアントの開発者は独自のシェル拡張を開発しました。これにより、このドラッグアンドドロップ動作が上書きされ、ファイルを正しいフォルダーにすぐにドロップできます。彼らは documentation でトリックを説明し、さらに興味深いことに、何が問題で、どのように解決したかを説明します。
ここに興味深い部分があります:
Windowsのドラッグ&ドロップメカニズムでは、ドラッグ&ドロップ操作のソースアプリケーションが、ファイルがドロップされた場所を簡単に見つけることができません。ファイルを宛先に転送するのは、ターゲットアプリケーション(通常はWindowsエクスプローラー)です。ソースアプリケーションはすべての可能な宛先にファイルを転送することができないため、それはかなり合理的です。ディレクトリだけでなく、Zipファイル(またはその他のアーカイブ)、リモートディレクトリ(FTP、SFTP、SCPなどを使用)、ゴミ箱などにもファイルをドロップできることに注意してください。
明らかに、Windowsエクスプローラ(またはWinZipのような他のターゲットアプリケーション)でも、可能なソースからファイルをダウンロードすることはできません(特に、SFTP/SCPを認識していません)。
また、特に7Zipの場合:ユーザーray023がSuperUserスタックQ&Aでこの質問に回答します: https://superuser.com/a/42246
基本的に、ファイルをドラッグアンドドロップする代わりに、bith 7-ZipおよびWinrarで利用可能な「ここで抽出」メソッドを使用する場合、ファイルは適切なディレクトリに直接抽出されます。
ファイルに対して何らかのデータ処理(デコード/変換など)を行う必要がある場合は、一時ファイルを使用し、完了したら、完了した場合にのみ、結果を最終的な宛先に転送することをお勧めします。
利点:
データの処理中に宛先に直接書き込むことの実際の利点はわかりません。