File.Replace в UNIX вызывает исключения, чтобы совпадать с реализацией Windows
Поведение File.Replace в операционных системах на базе UNIX изменилось. Исключения, которые оно вызывает, теперь совпадают с исключениями, вызываемыми реализацией Windows.
Прежнее поведение
В UNIX с .NET 5 метод File.Replace:
- Вызывает IOException с сообщением
Is a directory
, когдаsourceFileName
является файлом, аdestinationFileName
— каталогом. - Вызывает IOException с сообщением
Not a directory
, когдаsourceFileName
является каталогом, аdestinationFileName
— файлом. - Успешно выполняется, когда и
sourceFileName
, иdestinationFileName
указывают на один и тот же файл или каталог.
Новое поведение
В UNIX с .NET 6 метод File.Replace:
- Вызывает UnauthorizedAccessException с сообщением
The specified path <path> is not a path
, когдаsourceFileName
либоdestinationFileName
существует и не является файлом или когда оба,sourceFileName
иdestinationFileName
, указывают на один и тот же имеющийся каталог. - Вызывает IOException с сообщением
The source <sourceFileName> and destination <destinationFileName> are the same file
, когдаsourceFileName
иdestinationFileName
указывают на один и тот же имеющийся файл.
Представленные версии
.NET 6
Тип критического изменения
Это изменение может повлиять на совместимость исходного кода.
Причина изменения
Это изменение было внесено, чтобы убедиться в том, что File.Replace вызывает одни и те же исключения по одним и тем же причинам на разных платформах.
Рекомендуемое действие
Если вы вызываете File.Replace в UNIX внутри блока try catch
, не забудьте также перехватить UnauthorizedAccessException. Кроме того, следует учитывать новые перехватываемые типы поведения.