Unix 上的 File.Replace 引发匹配 Windows 实现的异常

基于 Unix 的操作系统上的 File.Replace 行为已更改。 它现在引发的异常与 Windows 实现所引发的异常一致。

旧行为

在 Unix 上,使用 .NET 5,File.Replace 方法会执行以下操作:

  • sourceFileName 是一个文件,destinationFileName 是一个目录时,引发 IOException,并显示 Is a directory 消息。
  • sourceFileName 是一个目录,destinationFileName 是一个文件时,引发 IOException,并显示 Not a directory 消息。
  • sourceFileNamedestinationFileName 指向同一个文件或目录时,将在静默状态下成功。

新行为

在 Unix 上,使用 .NET 6,File.Replace 方法会执行以下操作:

  • sourceFileNamedestinationFileName 存在且不是文件时,或者当 sourceFileNamedestinationFileName 都指向同一个现有目录时,引发 UnauthorizedAccessException,并显示 The specified path <path> is not a path 消息。
  • sourceFileNamedestinationFileName 都指向同一个现有文件时,引发 IOException,并显示 The source <sourceFileName> and destination <destinationFileName> are the same file 消息。

引入的版本

.NET 6

中断性变更的类型

此项更改可能会影响源兼容性

更改原因

进行此更改是为了确保 File.Replace 在各个平台中由于相同的原因而引发相同的异常。

如果你在 Unix 上在 try catch 块中调用 File.Replace,请确保现在还要捕获 UnauthorizedAccessException。 另外,请注意捕获的新行为。

受影响的 API