Por que o 7-zip / WinRAR descompacta os arquivos em "temp" antes de movê-los para o destino?
Não vejo nenhuma vantagem em apenas descompactar diretamente para o destino. É realmente irritante, especialmente para arquivos grandes (como é agora!).
Editar:
Por favor, explique por que eles não são feitos no local .
Respostas:
Como exatamente você está extraindo os arquivos? Você está usando a linha de comando ou a GUI? Você está arrastando os arquivos ou selecionando-os e usando a função extrair? Você está usando o menu de contexto da extensão do shell?
Se você inserir uma pasta de destino e selecionar a função de extração ou usar a extensão de shell, elas não serão extraídas para uma pasta temporária primeiro, elas serão extraídas diretamente para o destino.
Se você selecionar os arquivos na interface do usuário e arrastá- los para a pasta de destino, ele será extraído para uma pasta temporária.
O motivo está em como o destino é selecionado. Se você inserir a pasta de destino ou usar o item do menu de contexto, o programa saberá exatamente para onde precisa extrair. No entanto, se você simplesmente arrastar os arquivos, devido ao funcionamento da função de arrastar e soltar do OLE , o programa não saberá onde está a pasta de destino. Em outras palavras, é Explorerque recebe a pasta de destino, não o programa de arquivamento. Como resultado, o programa não pode saber onde extraí-los e, portanto, simplesmente extrai-os para a pasta temp, e o Explorer os move assim que terminar. Você pode ver isso claramente extraindo um arquivo grande usando os dois métodos. Quando você o arrasta para uma pasta, ele é extraído e você vê a caixa de diálogo de operação de arquivo padrão do Explorer movendo-o para a pasta. Se você especificar a pasta e clicar em Extrair, ela será extraída e nenhum processamento adicional será feito.
Fique à vontade para ler o código-fonte do 7-Zip para ver como o local de extração é tratado.
Aprendi isso da maneira mais difícil, há vários anos, quando queria implementar o recurso de arrastar e soltar em um programa que estava escrevendo.
fonte
Isso é feito para que os requisitos de memória para descompactação sejam mantidos no mínimo.
Se eles não usassem o sistema de arquivos, a descompressão aconteceria na memória. Sob condições de pouca memória, ou para arquivos compactados grandes, isso esgotaria mais cedo ou mais tarde a memória disponível e iniciaria o processo de paginação da memória.
A paginação nessas circunstâncias seria muito mais lenta do que apenas usar o sistema de arquivos, porque o arquivo ainda está sendo descompactado (e os arquivos de paginação continuam sendo adicionados), mas também porque, como o arquivo está sendo descompactado, ele está sendo verificado quanto a erros e, como tal, muitas operações de leitura / gravação. A pior coisa que pode acontecer com um arquivo de paginação.
EDIT: No que diz respeito ao uso de um diretório temporário, siga as orientações do sistema operacional. Se a descompressão falhar, não há garantia de que o programa que executa a operação se limpa. Pode ter travado, por exemplo. Como tal, nenhum arquivo residual permanece no diretório de destino e o sistema operacional descartará o arquivo temporário quando achar apropriado.
fonte
O motivo é mais simples do que você pensa: Muitos programas descompactam arquivos para% temp%, é que o sistema de arquivos de destino pode não ter espaço suficiente.
Agora, você pode saber que seu sistema de arquivos pode ter espaço suficiente, mas o aplicativo não. E se esse sistema de arquivos estiver em uso pelo sistema operacional ou outro aplicativo e for preenchido durante a descompactação?
Os desenvolvedores assumem que% temp% possui espaço "ilimitado", enquanto o seu destino não.
fonte
Não sendo um desenvolvedor de 7 zip ou WinRAR, meus comentários aqui são pura especulação. Dito isto, usar o espaço temporário para descompactar até que tudo esteja completo ajuda a verificar se todos os arquivos estão intactos (ou seja, se o zip não está corrompido).
Não há nada pior do que descompactar um arquivo compactado grande, tendo começado a trabalhar nos arquivos no início do arquivo; apenas para descobrir que algo está corrompido no final do arquivo. Nesse ponto, você perde a confiança em tudo.
Meu último comentário é que não me lembro de ter visto esse comportamento do 7-zip. Quando clico com o botão direito do mouse e digo extrair aqui, geralmente tenho acesso aos arquivos enquanto eles estão sendo descompactados. Você verificou se não é uma configuração em algum lugar?
fonte