Dot-Net

System.IO.File.Move 給出異常“文件存在”

  • January 3, 2021

通常,如果您嘗試移動到存在的文件,File.Move 會拋出消息“當該文件已存在時無法創建文件”。

我遇到了 File.Move 拋出的情況

“文件存在”

System.IO.__Error.WinIOError執行後直接拋出此異常File.Move

它正在嘗試將文件移動到網路驅動器。

經過一番搜尋,唯一給出這個特定消息的其他東西似乎是Path.GetTempFileName()- 如果臨時文件夾已滿,它可能會拋出這個。

我沒有使用GetTempFileName,臨時文件夾未滿。

有誰知道這可能是什麼原因,或者如何排除故障?(這是在託管伺服器上,只有管理公司可以訪問,我不能在這裡顯示專有程式碼)。

這來自 Windows,針對不同場景的不同錯誤程式碼。第二個是 ERROR_ALREADY_EXISTS,當文件從同一驅動器上的一個目錄移動到另一個目錄時,“無法創建該文件時該文件已存在” 。這是一個非常簡單的操作,它只需要移動目錄條目。

第一個是 ERROR_FILE_EXISTS,當文件從一個驅動器移動到另一個驅動器時,“文件存在” 。這是一個更複雜的操作,文件數據也必須被複製。換句話說,它回退到 File.Copy(string, string, bool) 的等價物,最後一個覆蓋參數設置為 false。它不使用相同的錯誤程式碼有點怪癖。不同之處在於文件系統驅動程序,而不是您的程序。否則,您只是得到一個非常通用的 IOException 而不是一個更具體的將文件操作事故分解為更細粒度的異常的原因。

這實際上不是問題,因為您在程式碼中對此無能為力,您需要人類的幫助來糾正問題。除非您在自己的程式碼中採取特定的先發製人措施,否則如果目標文件已經存在則避免移動,或者首先實際刪除目標文件。請注意,這兩者都不是 100% 可靠的解決方法,在您刪除文件之後但在您移動之前,另一個程序再次創建文件的可能性很小。在多任務作業系統上使文件操作完全可靠是相當困難的。

引用自:https://stackoverflow.com/questions/18659716