通常我會發現自己以某種方式與文件進行交互,但在編寫代碼之後,我總是不確定它實際上是多麼的粗糙。問題是,我不完全確定文件相關的操作如何失敗,因此是處理預期的最佳方式。如何在執行文件時正確處理異常io
簡單的解決方案似乎只是爲了捕獲代碼拋出的任何IOException,並給用戶一個「無法訪問的文件」的錯誤消息,但它可能會得到更多的細粒度的錯誤消息。有沒有辦法確定這樣的錯誤之間的差異,例如文件被另一個程序鎖定,並且數據由於硬件錯誤而無法讀取?
鑑於以下C#代碼,您將如何處理用戶友好(儘可能信息豐富)方式的錯誤?
public class IO
{
public List<string> ReadFile(string path)
{
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
throw new FileNotFoundException();
}
StreamReader reader = file.OpenText();
List<string> text = new List<string>();
while (!reader.EndOfStream)
{
text.Add(reader.ReadLine());
}
reader.Close();
reader.Dispose();
return text;
}
public void WriteFile(List<string> text, string path)
{
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
throw new FileNotFoundException();
}
StreamWriter writer = file.CreateText();
foreach(string line in text)
{
writer.WriteLine(line);
}
writer.Flush();
writer.Close();
writer.Dispose();
}
}
捕捉IOException並不完全足夠。類似OpenText的方法可以拋出其他異常,如UnauthorizedAccessException和ArgumentException。 – denver 2015-04-28 16:27:13