File.Replace en Unix produce excepciones para que coincidan con las de la implementación de Windows

El comportamiento de File.Replace en los sistemas operativos basados en Unix ha cambiado. Las excepciones que se producen ahora coinciden con las producidas por la implementación de Windows.

Comportamiento anterior

En Unix, con .NET 5, el método File.Replace hace lo siguiente:

  • Produce IOException con el mensaje Is a directory cuando sourceFileName es un archivo y destinationFileName es un directorio.
  • Produce IOException con el mensaje Not a directory cuando sourceFileName es un directorio y destinationFileName es un archivo.
  • Se ejecuta de forma silenciosa cuando sourceFileName y destinationFileName apuntan al mismo archivo o directorio.

Comportamiento nuevo

En Unix, con .NET 6, el método File.Replace hace lo siguiente:

  • Produce UnauthorizedAccessException con el mensaje The specified path <path> is not a path, cuando sourceFileName o destinationFileName existe y no es un archivo, o cuando sourceFileName y destinationFileName apuntan al mismo directorio existente.
  • Produce IOException con el mensaje The source <sourceFileName> and destination <destinationFileName> are the same file, cuando sourceFileName y destinationFileName apuntan al mismo archivo existente.

Versión introducida

.NET 6

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad de orígenes.

Motivo del cambio

Este cambio se realizó para tener la seguridad de que File.Replace produce las mismas excepciones por las mismas razones en todas las plataformas.

Si invoca File.Replace en Unix dentro de un bloque try catch, asegúrese de capturar también UnauthorizedAccessException. Además, tenga en cuenta los nuevos comportamientos que se detectan.

API afectadas