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
cuandosourceFileName
es un archivo ydestinationFileName
es un directorio. - Produce IOException con el mensaje
Not a directory
cuandosourceFileName
es un directorio ydestinationFileName
es un archivo. - Se ejecuta de forma silenciosa cuando
sourceFileName
ydestinationFileName
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
, cuandosourceFileName
odestinationFileName
existe y no es un archivo, o cuandosourceFileName
ydestinationFileName
apuntan al mismo directorio existente. - Produce IOException con el mensaje
The source <sourceFileName> and destination <destinationFileName> are the same file
, cuandosourceFileName
ydestinationFileName
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.
Acción recomendada
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.