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

基于 Unix 的操作系统中的 File.Replace 行为已更改。 它引发的异常现在与 Windows 实现引发的异常匹配。

以前的行为

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

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

新行为

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

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

已引入的版本

.NET 6

破坏性变更的类型

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

更改原因

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

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

受影响的 API