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
  • sourceFileNamedestinationFileName 指向相同的檔案或目錄時成功,且不傳送訊息。

新的行為

在 Unix 上,.NET 6 的 File.Replace 方法:

  • sourceFileNamedestinationFileName 存在且不是檔案時,或 sourceFileNamedestinationFileName 指向相同的現有目錄時,會擲回 UnauthorizedAccessException 並包含訊息 The specified path <path> is not a path
  • sourceFileNamedestinationFileName 指向相同的現有檔案時,會擲回 IOException 並包含訊息 The source <sourceFileName> and destination <destinationFileName> are the same file

導入的版本

.NET 6

中斷性變更的類型

此變更可能會影響來源相容性

變更原因

進行這項變更是為了確保 File.Replace 會在不同平台上,基於相同的原因擲回相同的例外狀況。

如果您在 Unix 上於 try catch 區塊內叫用 File.Replace,現在也請務必攔截 UnauthorizedAccessException。 此外,請注意攔截的新行為。

受影響的 API