Почему 7-zip / WinRAR распаковывают файлы в «temp» перед тем, как переместить их в место назначения?
Я не вижу никаких преимуществ по сравнению с прямым распаковыванием в пункт назначения. Это действительно раздражает, особенно для больших файлов (как сейчас!).
Редактировать:
Пожалуйста, объясните, почему они не сделаны на месте .
Ответы:
Как именно вы распаковываете файлы? Вы используете командную строку или графический интерфейс? Вы перетаскиваете файлы или выбираете их и используете функцию извлечения? Вы используете контекстное меню расширения оболочки?
Если вы вводите папку назначения, а затем выбираете функцию извлечения или используете расширение оболочки, то они сначала не извлекаются во временную папку, а извлекаются непосредственно в место назначения.
Если вы выберите файлы в пользовательском интерфейсе и перетащите их в целевую папку, тогда они будут извлечены во временную папку.
Причина в том, как выбран пункт назначения. Если вы входите в целевую папку или используете пункт контекстного меню, то программа точно знает, куда ее нужно извлечь. Однако если вы просто перетаскиваете файлы, то из-за того, как работает функция перетаскивания OLE , программа не знает, где находится целевая папка. Другими словами, это Explorerкоторый получает целевую папку, а не программу архивации. В результате программа не может знать, где их извлечь, и поэтому просто извлекает их во временную папку, а затем Explorer перемещает их, как только это будет сделано. Вы можете ясно видеть это, извлекая большой файл, используя оба метода. Когда вы перетаскиваете его в папку, он извлекает, а затем вы видите стандартный диалог операций с файлами в Проводнике, перемещающий его в папку. Если вы укажете папку и нажмете «Извлечь», она будет извлечена, и дальнейшая обработка не производится.
Не стесняйтесь просматривать исходный код 7-Zip, чтобы увидеть, как обрабатывается местоположение извлечения.
Я научился этому нелегко несколько лет назад, когда я хотел внедрить перетаскивание в программу, которую я писал.
источник
Это сделано для того, чтобы требования к памяти для распаковки были минимальными.
Если они не используют файловую систему, декомпрессия произойдет в памяти. При нехватке памяти или для больших сжатых файлов это рано или поздно истощит доступную память и запустит процесс подкачки памяти.
Пейджинг в этих условиях будет намного медленнее, чем просто использование файловой системы, потому что файл все еще распаковывается (и файлы страниц продолжают добавляться), но также и потому, что когда файл распаковывается, он проверяется на наличие ошибок, и поэтому много операций чтения / записи. Худшее, что может случиться с файлом подкачки.
РЕДАКТИРОВАТЬ: Что касается использования временного каталога, это так, чтобы следовать многим руководствам операционной системы. Если декомпрессия завершается неудачно, нет гарантии, что программа, выполняющая операцию, будет очищена после себя. Возможно, он разбился, например. Таким образом, в вашем целевом каталоге не остается остаточного файла, и операционная система удалит временный файл, когда сочтет нужным.
источник
Причина проще, чем вы думаете: многие программы распаковывают файлы в% temp%, потому что в файловой системе назначения может не хватить места.
Теперь вы можете знать, что в вашей файловой системе может быть достаточно места, а в приложении - нет. Что если эта файловая система используется ОС или другим приложением и заполняется при распаковке?
Разработчики предполагают, что% temp% имеет «неограниченное» пространство, а место назначения - нет.
источник
Не будучи разработчиком 7-zip или WinRAR, мои комментарии здесь являются чисто предположениями. Тем не менее, использование временного пространства для распаковки до полного заполнения помогает проверить, что все файлы не повреждены (то есть, что zip-файл не поврежден).
Нет ничего хуже, чем распаковать большой сжатый файл, начав работать с файлами в начале архива; только чтобы узнать, что что-то повреждено в конце архива. В этот момент вы теряете уверенность во всем.
Мой последний комментарий заключается в том, что я не помню, чтобы видел такое поведение из 7-ZIP. Когда я щелкаю правой кнопкой мыши и говорю извлечение здесь, у меня обычно есть доступ к файлам, поскольку они распаковываются. Вы дважды проверили, что это не где-то настройка?
источник