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
消息。 - 当
sourceFileName
和destinationFileName
指向同一个文件或目录时,将在静默状态下成功。
新行为
在 Unix 上,使用 .NET 6,File.Replace 方法会执行以下操作:
- 当
sourceFileName
或destinationFileName
存在且不是文件时,或者当sourceFileName
和destinationFileName
都指向同一个现有目录时,引发 UnauthorizedAccessException,并显示The specified path <path> is not a path
消息。 - 当
sourceFileName
和destinationFileName
都指向同一个现有文件时,引发 IOException,并显示The source <sourceFileName> and destination <destinationFileName> are the same file
消息。
引入的版本
.NET 6
中断性变更的类型
此项更改可能会影响源兼容性。
更改原因
进行此更改是为了确保 File.Replace 在各个平台中由于相同的原因而引发相同的异常。
建议操作
如果你在 Unix 上在 try catch
块中调用 File.Replace,请确保现在还要捕获 UnauthorizedAccessException。 另外,请注意捕获的新行为。