Cópia de arquivo atômico em .NET
-
19-09-2019 - |
Pergunta
Estou construindo um aplicativo de servidor que copia arquivos usando o System.io.file.copy (...) função. Meus arquivos podem ser bastante grandes; portanto, tem uma chance justa de que, se a máquina travar, isso aconteça durante a cópia.
Depois de reiniciar o serviço, devo poder pegar as tarefas de cópia e continuar. Como posso detectar se uma cópia foi concluída ou interrompida com sucesso por falha no servidor?
Meu plano atual é copiar os arquivos para um nome temporário e, uma vez que copiar, renomeie -o para o nome final. Dessa forma, a nomeação do arquivo é capaz de transportar as informações do estado sobre a falha.
Você tem alguma sugestão boa/melhor?
Editar: o Target OS é Win2003, portanto, o NTFS transacional não está disponível
Solução
Outros sugeriram NTFs transacionais, o que é bom se você estiver implantando no Vista ou posterior. Se você precisar suportar o XP (ou anterior), o arquivo temporário seguido de um movimento (renomeio) é a melhor solução.
A resposta a esta pergunta semelhante fornece mais informações:Atomicidade do arquivo.move
Outras dicas
Versões mais recentes do Windows permitem que você use transações .
Verificação de saída Background Intelligent Transfer Service no Windows Server 2003. Ele fornece o mecanismo de empregos, que pode ser pausado e retomado mesmo após o reinício.
Aqui estão algumas amostras de como usá -lo com .NET: