次の方法で共有


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

Unix ベースのオペレーティング システムでの File.Replace の動作が変更されました。 投げられる例外は、Windows 実装によって投げられる例外と一致するようになりました。

以前の動作

Unix では、.NET 5 では、 File.Replace メソッドは次のようになります。

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

新しい動作

Unix では、.NET 6 では、 File.Replace メソッドは次のようになります。

  • UnauthorizedAccessExceptionまたはThe 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