web-dev-qa-db-ja.com

7-Zip / WinRARファイルを宛先に移動する前に「一時」に解凍するのはなぜですか?

7-Zip/WinRARファイルを宛先に移動する前に「一時」に解凍するのはなぜですか?

宛先に直接解凍するだけの利点はないようです。特に大きなファイル(特に現在の場合)の場合は、非常に不快です。


編集:

それらが行われない理由を説明してください所定の場所

50
user69835

どのくらい正確にファイルを抽出していますか?コマンドラインまたはGUIを使用していますか?ファイルをドラッグしていますか、それとも選択して抽出機能を使用していますか? Shell-extensionコンテキストメニューを使用していますか?

宛先フォルダーを入力してから、抽出機能を選択するか、シェル拡張を使用する場合、最初に一時フォルダーに抽出しないしない抽出します目的地に直接。

UIでファイルを選択し、ターゲットフォルダーにドラッグすると、一時フォルダーに抽出されます。

その理由は、宛先の選択方法にあります。ターゲットフォルダを入力するか、コンテキストメニュー項目を使用すると、プログラムは抽出先を正確に認識します。ただし、単にファイルをドラッグする場合、 [〜#〜] ole [〜#〜] のドラッグアンドドロップ機能がどのように機能するかにより、プログラムはターゲットフォルダーの場所を認識しません。です。つまり、アーカイブプログラムではなく、ターゲットフォルダーを受け取るのはExplorerです。その結果、プログラムはそれらをどこに抽出するかわからないため、一時フォルダーにそれらを抽出するだけで、エクスプローラーはそれらが完了したらそれらを移動します。両方の方法を使用して大きなファイルを抽出すると、これをはっきりと見ることができます。フォルダにドラッグすると、解凍されて、エクスプローラの標準のファイル操作ダイアログがフォルダに移動します。フォルダーを指定して「抽出」をクリックすると、フォルダーが抽出され、それ以上の処理は行われません。

7-Zipのソースコード をよく読んで、抽出場所の処理方法を確認してください。


数年前に、私が書いていたプログラムにドラッグアンドドロップを実装したかったときに、これを苦労して学びました。

83
Synetech

解凍のためのメモリ要件が最小限に保たれるように行われます。

ファイルシステムを使用しなかった場合、メモリで解凍が行われます。メモリ不足の状態、または大きな圧縮ファイルの場合、これは遅かれ早かれ使用可能なメモリを使い果たし、メモリページングのプロセスを開始します。

これらの状況でのページングは​​、ファイルがまだ解凍されている(そしてページファイルが追加され続ける)ため、ファイルシステムを使用するよりもはるかに遅くなりますが、ファイルが解凍されているときにエラーがチェックされるため多くの読み取り/書き込み操作。ページファイルに起こり得る最悪の事態。

編集:一時ディレクトリの使用に関しては、これは多くのオペレーティングシステムガイドラインに従うためです。解凍が失敗した場合、操作を実行するプログラムが自動的にクリーンアップする保証はありません。たとえば、クラッシュした可能性があります。そのため、ターゲットディレクトリに残っているファイルはなく、オペレーティングシステムは適切と判断した場合に一時ファイルを破棄します。

1
A Dwarf