File.Replace no Unix gera exceções para corresponder à implementação Windows
O comportamento de File.Replace em sistemas operacionais baseados em Unix foi alterado. As exceções geradas agora correspondem àquelas geradas pela implementação Windows.
Comportamento anterior
No Unix, com o .NET 5, o método File.Replace:
- Gera IOException com a mensagem
Is a directory
quandosourceFileName
é um arquivo edestinationFileName
é um diretório. - Gera IOException com a mensagem
Not a directory
quandosourceFileName
é um diretório edestinationFileName
é um arquivo. - Completa silenciosamente com êxito quando ambos
sourceFileName
edestinationFileName
apontam para o mesmo arquivo ou diretório.
Novo comportamento
No Unix, com o .NET 6, o método File.Replace:
- Gera UnauthorizedAccessException com a mensagem
The specified path <path> is not a path
, quandosourceFileName
oudestinationFileName
existe e não é corresponde a um arquivo, ou quando ambossourceFileName
edestinationFileName
apontam para o mesmo diretório existente. - Gera IOException com a mensagem
The source <sourceFileName> and destination <destinationFileName> are the same file
quandosourceFileName
edestinationFileName
apontam para o mesmo arquivo existente.
Versão introduzida
.NET 6
Tipo de alteração interruptiva
Essa alteração pode afetar a compatibilidade da origem.
Motivo da alteração
Essa alteração foi feita para garantir que File.Replace gere as mesmas exceções pelos mesmos motivos em todas as plataformas.
Ação recomendada
Se você invocar File.Replace em Unix dentro de um bloco try catch
, agora não se esqueça de capturar também UnauthorizedAccessException. Além disso, lembre-se dos novos comportamentos que são capturados.