Estou escrevendo um aplicativo que funciona com imagens de satélite, e meu chefe me pediu para examinar alguns aplicativos comerciais e ver como eles se comportam. Eu encontrei um comportamento estranho e, em seguida, como eu estava, também o encontrei em outros aplicativos padrão.
Esses programas primeiro gravam na pasta temporária e depois copiam para o destino pretendido.
Exemplo: 7zip primeiro extrai para a pasta temp e depois copia os dados extraídos para o local para o qual você pediu para extrair os dados.
Vejo vários problemas com essa abordagem:
A pasta temporária pode não ter espaço suficiente, enquanto o local pretendido pode ter muito espaço.
Se for um arquivo grande, pode levar um tempo não negligenciável para a operação de cópia.
Eu pensei muito sobre isso, mas não consegui ver um único ponto positivo para fazer isso. Estou faltando alguma coisa ou há um benefício real em fazer isso?
fonte
Respostas:
Algumas razões pelas quais posso pensar:
TL; DR - ele se resume principalmente à atomicidade, ou seja, você deseja torná-lo para que (no local final) o arquivo esteja completo ou não esteja em nenhum momento.
fonte
Esse parece ser um problema no Windows, mais especificamente relacionado a como o arrastar-soltar é gerenciado.
Os desenvolvedores do cliente WINSCP desenvolveram sua própria extensão de shell, que substitui esse comportamento de arrastar e soltar e permite soltar o arquivo na pasta correta imediatamente. Eles explicam o truque em sua documentação e, mais interessante, qual é o problema e como o resolveram.
Aqui está a parte interessante:
Além disso, especificamente para o 7Zip: o usuário ray023 responde a esta pergunta nas perguntas e respostas da pilha do superusuário: https://superuser.com/a/422463
Basicamente, se, em vez de arrastar e soltar o arquivo, você usar o método "extrair aqui", disponível no 7-ZIP e no Winrar, os arquivos serão extraídos diretamente no diretório certo.
fonte
Se você precisar fazer algum tipo de processamento de dados no arquivo (decodificar / converter / etc.), é melhor usar um arquivo temporário e, quando concluído, e somente se concluído, transferir o resultado para o destino final.
Benefícios:
Não vejo benefícios reais de escrever diretamente no destino durante o processamento dos dados.
fonte