在試圖回答this question時,我驚訝地發現當該文件已存在時嘗試創建新文件不會拋出唯一的異常類型,它只會拋出通用的IOException
。異常代碼或檢測到「文件已存在」類型異常
因此我想知道如何確定IOException
是現有文件的結果還是其他一些IO錯誤。
異常有一個HResult,但此屬性是受保護的,因此對我無效。
我能看到的唯一的另一種方式是模式匹配消息字符串,感覺很糟糕。
例如:
try
{
using (var stream = new FileStream("C:\\Test.txt", FileMode.CreateNew))
using (var writer = new StreamWriter(stream))
{
//write file
}
}
catch (IOException e)
{
//how do I know this is because a file exists?
}
爲什麼你不只是檢查,看看文件是否存在?吻。 –
由於文件系統固有地不穩定。文件可以隨時創建(不僅僅是我)。 – GazTheDestroyer
將多個錯誤集成爲一個異常,無法區分它們可能是.NET框架設計的最糟糕的特性。您在磁盤已滿,未找到網絡路徑等方面存在相同的問題。IOException。即使您獲得HResult代碼,如果您的代碼也需要在Linux上的Mono下運行,那麼不支持 – jimvfr