System.IO.File.Delete引發的路徑存取被拒錯誤
網站發生了一個詭異的System.IO.File.Delete引發的錯誤,中文大致上的意思是指「未經處理的異常...System.UnauthorizedAccessException...存取路徑XXX被拒...」。這問題詭異的地方是這個、、不可能有刪除檔案權限的問題(因為用同樣的身分可建立檔案)。
這問題詭異的地方是:
- 路徑確定正常。
- 網站用來存取檔案的身分正常(該身分擁有這個目錄的完整控制權)。
- 刪除用同一個身分建立的檔案出錯。(確定檔案由該身分建立)
遇到這種見鬼的問題,依照多年的經驗毫不眷戀在網站運行身分的稽查上,馬上把錯誤訊息的英文對照版找出來,拋到網路找類似的苦主,英文錯誤訊息為:
An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll Additional information: Access to the path 'C:\YourOwnPath' is denied.
馬上就在網路找到答案,真的有人跟我一樣使用System.IO.File.Delete()方法產生問題。解決的方式也很簡單,就是在刪除前把檔案的屬性變更一下就可以了。
System.IO.File.SetAttributes("C:\YourOwnPath\YourFileName.ext", System.IO.FileAttributes.Normal);
System.IO.File.Delete("C:\YourOwnPath\YourFileName.ext");
說真的我不知道為何將檔案的屬性變更為Normal就可以,我也很確定我要刪除的目標檔案沒有被設定成唯獨(readonly),我懷疑應該是ADS的Zone.Identifier害的,因為這陣子太忙了,總之程式碼可以正常運作後我就沒有去管它了。