49

Почему 7-zip / WinRAR распаковывают файлы в "temp" перед тем, как переместить их в место назначения?

Я не вижу никаких преимуществ по сравнению с прямым распаковыванием в пункт назначения. Это действительно раздражает, особенно для больших файлов (как сейчас!).


Редактировать:

Пожалуйста, объясните, почему они не сделаны на месте.

4 ответа4

82

Как именно вы распаковываете файлы? Вы используете командную строку или графический интерфейс? Вы перетаскиваете файлы или выбираете их и используете функцию извлечения? Вы используете контекстное меню расширения оболочки?

Если вы вводите папку назначения, а затем выбираете функцию извлечения или используете расширение оболочки, то они сначала не извлекаются во временную папку, они извлекаются непосредственно в место назначения.

Если вы выберите файлы в пользовательском интерфейсе и перетащите их в целевую папку, то они будут извлечены во временную папку.

Причина в том, как выбран пункт назначения. Если вы входите в целевую папку или используете пункт контекстного меню, то программа точно знает, куда ее нужно извлечь. Однако если вы просто перетаскиваете файлы, то из-за того, как работает функция перетаскивания OLE , программа не знает, где находится целевая папка. Другими словами, именно Explorer получает целевую папку, а не программу архивирования. В результате программа не может знать, где их извлечь, и поэтому просто извлекает их во временную папку, а затем Explorer перемещает их, как только это будет сделано. Вы можете ясно видеть это, извлекая большой файл, используя оба метода. Когда вы перетаскиваете его в папку, он извлекает, а затем вы видите стандартный диалог операций с файлами в Проводнике, перемещающий его в папку. Если вы укажете папку и нажмете «Извлечь», она будет извлечена, и дальнейшая обработка не производится.

Не стесняйтесь просматривать исходный код 7-Zip, чтобы увидеть, как обрабатывается местоположение извлечения.


Я научился этому нелегко несколько лет назад, когда хотел внедрить перетаскивание в программу, которую я писал.

1

Это сделано для того, чтобы требования к памяти для распаковки были минимальными.

Если бы они не использовали файловую систему, распаковка произошла бы в памяти. При нехватке памяти или для больших сжатых файлов это рано или поздно истощит доступную память и запустит процесс подкачки памяти.

Пейджинг в этих условиях будет намного медленнее, чем просто использование файловой системы, потому что файл все еще распаковывается (и файлы страниц продолжают добавляться), но также и потому, что когда файл распаковывается, он проверяется на наличие ошибок, и поэтому много операций чтения / записи. Худшее, что может случиться с файлом подкачки.

РЕДАКТИРОВАТЬ: Что касается использования временного каталога, это так, чтобы следовать многим руководствам операционной системы. Если декомпрессия завершается неудачно, нет гарантии, что программа, выполняющая операцию, будет очищена после себя. Возможно, он разбился, например. Таким образом, в вашем целевом каталоге не остается остаточного файла, и операционная система удалит временный файл, когда сочтет это необходимым.

-1

Причина проще, чем вы думаете: многие программы распаковывают файлы в% temp%, потому что в целевой файловой системе может не хватить места.

Теперь вы можете знать, что вашей файловой системе может быть достаточно места, а приложения - нет. Что если эта файловая система используется ОС или другим приложением и заполняется при распаковке?

Разработчики предполагают, что% temp% имеет "неограниченное" пространство, а пункт назначения - нет.

-2

Не будучи разработчиком 7-zip или WinRAR, мои комментарии здесь являются чисто предположениями. Тем не менее, использование временного пространства для распаковки, пока все не будет завершено, помогает убедиться, что все файлы не повреждены (то есть, что zip не поврежден).

Нет ничего хуже, чем распаковать большой сжатый файл, начав работать с файлами в начале архива; только чтобы узнать, что что-то повреждено в конце архива. В этот момент вы теряете уверенность во всем.

Мой последний комментарий заключается в том, что я не помню, чтобы видел такое поведение из 7-ZIP. Когда я щелкаю правой кнопкой мыши и говорю извлечение здесь, я обычно имею доступ к файлам, поскольку они распаковываются. Вы дважды проверили, что это не где-то настройка?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .