Поделиться через


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. Кроме того, следует учитывать новые перехватываемые типы поведения.

Затронутые API