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


50

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

目的地に直接解凍することには何の利点もありません。特に大きなファイル(今のように!)にとっては非常に刺激的です。


編集:

なぜそれらが適切に行わないのか説明してください。


3
WinRARの一時フォルダーとして ''を指定した場合、宛先に直接抽出する必要があります。

回答:


82

ファイルをどのくらい正確に抽出していますか?コマンドラインまたはGUIを使用していますか?ファイルをドラッグするか、選択して抽出機能を使用しますか?シェル拡張コンテキストメニューを使用していますか?

宛先フォルダーを入力してから抽出機能を選択するか、シェル拡張を使用すると、最初に一時フォルダーに抽出せず、宛先に直接抽出します。

あなたはUI内のファイルを選択した場合はドラッグ対象のフォルダに、それがされます一時フォルダに解凍します。

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

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


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


7
絶対に素晴らしい-これに感謝します!これは何年も私を悩ませてきましたが、「何」と「理由」を追跡するのに時間がかかりませんでした。 。CのTempフォルダに最初の抽出に設定:.しかし、悲しいかなされなければならない、私は2つの方法の間の相関関係を接続したことがない、それを見つけて、今の光を見て感謝しないでください:)ありがとう!
Coldblackice

2
ここで間違っていることの1つは、エクスプローラーがファイルを移動せず、コピーすることです。されて、本当に刺激に移動することは本当に速い(パーティションにパーティションから移動する場合を除く)で、(それはスペースを無駄にしない)理想的な選択肢となってますが、マイクロソフトで馬鹿にそれは素晴らしいアイデアだと思っているはずですので、コピー一時フォルダからその後、一時フォルダのデータをそのままにしておきます。巨大なアーカイブを抽出するとスペースが2倍になるだけでなく、ほぼ2倍の時間がかかります!
ADTC 14

彼らにはおそらくその理由があり、Windows 3の時代にOLEを最初に設計したときに、システムやDDEのベースに何らかの制限があったためかもしれません。今日適用される場合と適用されない場合がある制限。
Synetech 14

1
ええ、特にスペースが限られた仮想マシンでは、それはやりがいがあります。「解凍」を使用すると、約1分で6000以上のファイルを含む8GB RARアーカイブが解凍されます。ただし、フォルダをドラッグすると、一時ディレクトリに解凍するのに同じ時間がかかりますが、さらに、ターゲットウィンドウがフリーズし、3 MB /秒で15分以上ファイルをコピーします。別の仮想マシンからネットワーク経由で数百MB / sでこのマシンにファイルをコピーできる場合でも、同じドライブ上のファイルのコピーは特に低速です(おそらく、基礎となる仮想ファイルシステムが原因です)。
トリインコ

1
潜在的な回避策は、GUID名を持つ0バイトのファイルを作成すること、つまり実際には重複したファイル名として発生する可能性は低いと思います。次に、explorer.exeのファイルハンドルを監視して、ファイルのコピー先を確認します。最後にアーカイブを宛先に抽出します。
Zv_oDD

1

圧縮解除のためのメモリ要件が最小限に抑えられるように行われます。

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

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

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


3
真の間にファイルが最初と一時ディレクトリに圧縮されている理由、それは説明していませんその後、先のいずれかに移動しました。操作はそこでも行われている可能性があります。
slhck

3
あなたの質問をよりよく反映するように編集
Aドワーフ

4
@Dante、それは真実ではありません。同じパーティション上のファイルを移動すると、ファイルシステム内のファイルのインデックスが新しいディレクトリに変更されるだけで、データはコピーされず、一瞬だけかかります。信じられない?試して、1つのフォルダーからマルチGBファイルを切り取り、別のフォルダーに貼り付けます。1秒もかかりません。別のドライブまたはパーティションに対して同じことを試みます。数分かかります。
ダールハイアーチ

3
再「オペレーティングシステムは、それが適切な見たときに、一時ファイルを処分します」:ないWindowsは、これまでにそれを行いますか?
-grawity

1
この完全に間違った答えは削除する必要があります。7zipは、ドラッグアンドドロップ操作中に一時フォルダーにのみ解凍されます。これは、Windowsの制限によるものです。詳細については、superuser.com / questions / 197961 /…を参照してください。
dss539

-1

理由は思っているより簡単です:多くのプログラムはファイルを%temp%に解凍します。これは、宛先ファイルシステムに十分なスペースがない可能性があるためです。

これで、ファイルシステムに十分なスペースがあるかもしれないこと知っているかもしれませんが、アプリケーションにはありません。そのファイルシステムがOSまたは別のアプリケーションによって使用されており、解凍中にいっぱいになった場合はどうなりますか?

開発者は、%temp%に「無制限」のスペースがあると仮定しますが、宛先にはありません。


まったくそうではありません。一時ディレクトリを使用する理由ではありません。アプリケーションはありません十分なスペースがあるか否かを知っている(あるいは少なくとも缶)。最初に、アーカイバは圧縮ファイルが解凍されるときの大きさを正確に知っており、事前にそれらを割り当てることができます。次に、解凍​​時にそれらを入力します。次に、ドライブの空き領域を照会するのは非常に簡単です。さらに、十分なスペースがない場合は、可能な限り解凍し、スペースがなくなるとエラーをスローします。
Synetech

実際、これは非常に答えです。アプリケーションがターゲット宛先のスペースを事前に割り振ることができるからといって、それが排他的にアクセスできるわけではありません。アプリケーションは宛先を照会し、十分なスペースがあるかどうかを確認できますが、その照会が行われている間、スペースを割り振る前に、別のアプリケーションがそのスペースの一部を使用できます。
ケルタリ

さらに、ユーザーの一時スペースはファイルシステムレベルでそのユーザーに関連付けられています。クラッシュまたは別の障害が発生した場合、別のユーザーは一時ファイルを見ることができませんでした。宛先にはこのようなセキュリティ制限がないため、機密データを別のファイルシステムに持ち込まないようにする方が安全です。
ケルタリ

先ほど言ったように、解凍中に不足するとエラーメッセージが表示されます。一時ドライブに抽出すると、どのように修正されますか?十分なスペースがない場合、ファイルが一時ドライブに抽出された後、十分なスペースがなく、すべてのCPUサイクルと、一時ドライブに抽出するドライブの読み取り/書き込みが無駄になります。私が答えで言ったように、7-Zipのソースコードを自由に読んだりAlexander Roshal連絡してWinRARについて尋ねたりしてください。また、先ほど言ったように、ターゲットを指定するか、コンテキストメニューを使用する場合、%temp%使用しません
Synetech

-2

7-zipまたはWinRARの開発者ではないため、ここでの私のコメントは単なる推測です。そうは言っても、すべてのファイルが完全である(つまり、zipが破損していない)ことを確認するには、一時スペースを使用してすべてをアンパックします。

アーカイブの開始時にファイルの作業を開始して、大きな圧縮ファイルを解凍することほど悪いことはありません。アーカイブの最後で何かが破損していることを知るためだけです。その時点で、すべてに対する自信を失います。

私の最後のコメントは、7-zipでこの動作を見たことを覚えていないということです。ここで右クリックして「展開」と言うと、通常、ファイルが展開されているときにアクセスできます。どこかに設定されていないことを再確認しましたか?


3番目の段落:このような設定は見つかりません。それは今たくさんのファイル(4G)を抽出していましたが、4Gはすべてゆっくりと移動したと確信しています。

2番目の段落:zipファイルが既に破損している場合、「temp」に抽出しても何も妨げられません。

破損したzipからファイルが見えないようにします。ロジックは、すべてが検証されるまで何も見えないということです。設定に関する限り、何を伝えればいいのかわかりません。7-zipでデスクトップに大きなtarファイルを抽出するように指示すると、すぐにファイルが表示され始めます。tarが圧縮形式ではない可能性があります。
カーク

>ロジックは、すべてが検証されるまで何も見えないということです。それはばかげている。破損したアーカイブからいくつかのファイルをどのように回復しますか?経験しないのは、GUIからファイルをドラッグする代わりにシェル拡張を使用したためです。
Synetech
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.