Unix 上の File.Replace から Windows の実装と同じ例外がスローされる

Unix ベースのオペレーティング システム上の File.Replace の動作が変更されました。 スローされる例外は、Windows の実装からスローされるものと同じになりました。

以前の動作

Unix 上で .NET 5 を使用する場合の File.Replace メソッド:

  • sourceFileName がファイルで destinationFileName がディレクトリの場合、メッセージ Is a directory と共に IOException がスローされます。
  • sourceFileName がディレクトリで destinationFileName がファイルの場合、メッセージ Not a directory と共に IOException がスローされます。
  • sourceFileNamedestinationFileName の両方が同じファイルまたはディレクトリを指している場合は、メッセージなしで成功します。

新しい動作

Unix 上で .NET 6 を使用する場合の File.Replace メソッド:

  • sourceFileName または destinationFileName のいずれかが存在し、ファイルではない場合、または sourceFileNamedestinationFileName の両方が同じ既存のディレクトリを指している場合、メッセージ The specified path <path> is not a path と共に UnauthorizedAccessException がスローされます。
  • sourceFileNamedestinationFileName が同じ既存のファイルを指している場合、メッセージ The source <sourceFileName> and destination <destinationFileName> are the same file と共に IOException がスローされます。

導入されたバージョン

.NET 6

破壊的変更の種類

この変更はソースの互換性に影響を与える可能性があります。

変更理由

この変更は、プラットフォームが異なっても、同じ理由の場合は File.Replace から同じ例外がスローされるようにするためです。

Unix 上で try catch ブロック内で File.Replace を呼び出す場合は、UnauthorizedAccessException もキャッチするようにしてください。 また、キャッチされる新しい動作にも注意してください。

影響を受ける API