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