Por que o 7-zip / WinRAR descompacta os arquivos em “temp” antes de movê-los para o destino?

48

Por que o 7-zip / WinRAR descompacta os arquivos para "temp" antes de movê-los para o destino?

Não vejo qualquer vantagem contra 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 lugar .

    
por Steven M. Vascellaro 25.06.2011 / 17:00

4 respostas

80

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 de extração? Você está usando o menu de contexto da extensão da shell?

Se você inserir uma pasta de destino e, em seguida, selecionar a função de extração ou usar a extensão do shell, eles não serão extraídos para uma pasta temporária primeiro, eles serão extraídos diretamente para o destino.

Se você selecionar os arquivos na IU e arrastar para a pasta de destino, então 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, então, devido a como funciona a função arrastar e soltar de OLE , o programa não sabe onde está a pasta de destino. Em outras palavras, é o Explorer que recebe a pasta de destino, não o programa de arquivamento. Como resultado, o programa não pode saber onde extraí-los e, assim, simplesmente os extrai para a pasta temp e, em seguida, o Explorer os move assim que é feito. Você pode ver isso claramente extraindo um arquivo grande usando ambos os métodos. Quando você o arrasta para uma pasta, ele é extraído e, em seguida, você vê a caixa de diálogo de operação de arquivo padrão do Explorer movendo-a para a pasta. Se você especificar a pasta e clicar em Extrair, ela será extraída e nenhum processamento adicional será feito.

Sinta-se à vontade para examinar o código-fonte do 7-Zip para ver como a extração a localização é tratada.


Eu aprendi isso da maneira mais difícil, há vários anos, quando quis implementar drag-and-drop em um programa que estava escrevendo.

    
por 26.08.2011 / 23:49
1

Isso é feito para que os requisitos de memória para descompressã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 grandes arquivos compactados, isso mais cedo ou mais tarde esgotaria a memória disponível e iniciaria o processo de paginação de memória.

A paginação sob essas circunstâncias seria muito mais lenta do que 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, enquanto o arquivo está sendo descompactado, ele está sendo verificado quanto a erros e erros. há tantas operações de leitura / gravação. A pior coisa que pode acontecer com um arquivo de paginação.

EDITAR: Quanto ao uso de um diretório temporário, é assim seguir várias diretrizes do sistema operacional. Se a descompressão falhar, não há garantia de que o programa que executa a operação seja limpo após ela mesma. Pode ter caído por exemplo. Como tal, nenhum arquivo residual permanece em seu diretório de destino e o sistema operacional descartará o arquivo temporário quando achar apropriado.

    
por 25.06.2011 / 17:21
-1

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, no entanto, 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 supõem que% temp% tenha espaço "ilimitado", enquanto seu destino não.

    
por 27.08.2011 / 00:03
-2

Não sendo um desenvolvedor 7-zip ou WinRAR, meus comentários aqui são puramente especulativos. Dito isto, usando espaço temporário para descompactar até que tudo esteja completo, ajude 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 em arquivos no início do archive; 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 quando eles são descompactados. Você já checou que não é um cenário em algum lugar?

    
por 25.06.2011 / 17:15