Compartilhar via


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 quando sourceFileName é um arquivo e destinationFileName é um diretório.
  • Gera IOException com a mensagem Not a directory quando sourceFileName é um diretório e destinationFileName é um arquivo.
  • Completa silenciosamente com êxito quando ambos sourceFileName e destinationFileName 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, quando sourceFileName ou destinationFileName existe e não é corresponde a um arquivo, ou quando ambos sourceFileName e destinationFileName apontam para o mesmo diretório existente.
  • Gera IOException com a mensagem The source <sourceFileName> and destination <destinationFileName> are the same file quando sourceFileName e destinationFileName 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.

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.

APIs afetadas