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 がスローされます。sourceFileName
とdestinationFileName
の両方が同じファイルまたはディレクトリを指している場合は、メッセージなしで成功します。
新しい動作
Unix 上で .NET 6 を使用する場合の File.Replace メソッド:
sourceFileName
またはdestinationFileName
のいずれかが存在し、ファイルではない場合、またはsourceFileName
とdestinationFileName
の両方が同じ既存のディレクトリを指している場合、メッセージThe specified path <path> is not a path
と共に UnauthorizedAccessException がスローされます。sourceFileName
とdestinationFileName
が同じ既存のファイルを指している場合、メッセージThe source <sourceFileName> and destination <destinationFileName> are the same file
と共に IOException がスローされます。
導入されたバージョン
.NET 6
破壊的変更の種類
この変更はソースの互換性に影響を与える可能性があります。
変更理由
この変更は、プラットフォームが異なっても、同じ理由の場合は File.Replace から同じ例外がスローされるようにするためです。
推奨アクション
Unix 上で try catch
ブロック内で File.Replace を呼び出す場合は、UnauthorizedAccessException もキャッチするようにしてください。 また、キャッチされる新しい動作にも注意してください。
影響を受ける API
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET