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

Foi útil?

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:

Escreva aplicativos de atualização automática com .NET e a API de serviço de transferência inteligente em segundo plano

Sharpbits.net - wrapper para bits API

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top