File.Replace jogando ioexception
-
24-09-2019 - |
Pergunta
Eu tenho um aplicativo que pode fazer imagens modificadas. Em alguns casos, isso torna o tamanho do arquivo menor, em alguns casos maior.
O programa não tem a opção de "não substituir o arquivo se o resultado tiver um tamanho maior".
Então, escrevi um pequeno aplicativo C# para tentar resolver isso.
Em vez de substituir os arquivos, faço o aplicativo escrever o resultado em uma pasta sob a atual e nomear o teste da pasta.
O aplicativo C# que escrevi compara agarra o conteúdo das duas pastas e coloca o caminho completo para o (s) arquivo (s) em dois objetos da lista. Eu então comparo e substituo.
A substituição não está funcionando, no entanto. Eu recebo a seguinte ioexception:
Incapaz de remover o arquivo a ser substituído
A localização está em um dígito externo, no qual tenho todos os direitos.
Agora, eu sei que posso simplesmente fazer file.delete e file.move nessa ordem, mas essa exceção me interessou Por quê Esta configuração específica não funciona.
Aqui está o código -fonte: http://pastebin.com/4vq82umu
E sim, o arquivo especificado como último argumento da função de substituição existe.
Solução
Verifique se seu arquivo a ser substituído não está carregado na memória, que pode estar causando um bloqueio no arquivo
Tente usar a instrução usando para descartar automaticamente o recurso,
De acordo com a documentação:
Se DestinationBackupFileName estiver em uma unidade diferente, ele não será removido como a documentação declara, em vez disso, uma ioexception será lançada com a mensagem "Não é possível remover o arquivo a ser substituído". é jogado