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
。 - 當
sourceFileName
和destinationFileName
指向相同的檔案或目錄時成功,且不傳送訊息。
新的行為
在 Unix 上,.NET 6 的 File.Replace 方法:
- 當
sourceFileName
或destinationFileName
存在且不是檔案時,或sourceFileName
和destinationFileName
指向相同的現有目錄時,會擲回 UnauthorizedAccessException 並包含訊息The specified path <path> is not a path
。 - 當
sourceFileName
和destinationFileName
指向相同的現有檔案時,會擲回 IOException 並包含訊息The source <sourceFileName> and destination <destinationFileName> are the same file
。
導入的版本
.NET 6
中斷性變更的類型
此變更可能會影響來源相容性。
變更原因
進行這項變更是為了確保 File.Replace 會在不同平台上,基於相同的原因擲回相同的例外狀況。
建議的動作
如果您在 Unix 上於 try catch
區塊內叫用 File.Replace,現在也請務必攔截 UnauthorizedAccessException。 此外,請注意攔截的新行為。
受影響的 API
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應