Compartilhar via


File.Replace no Unix gera exceções para corresponder à implementação do Windows

O comportamento de File.Replace nos sistemas operacionais baseados em Unix foi alterado. As exceções geradas agora correspondem às que são geradas pela implementação do Windows.

Comportamento anterior

No Unix, com o .NET 5, o método File.Replace:

  • Lança 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

Em Unix, com o .NET 6, o método File.Replace:

  • Lança UnauthorizedAccessException com a mensagem The specified path <path> is not a path se sourceFileName ou destinationFileName existe e não é um arquivo, ou quando tanto sourceFileName quanto 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 mudança disruptiva

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 entre 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