我有以下代碼:吃異常或檢查null?
private async Task <string>IsolatedStorageReadTextFile(string uFileName)
{
string sRet = "";
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(uFileName);
if (file != null)
{
using (var inputStream = await file.OpenReadAsync())
using (var classicStream = inputStream.AsStreamForRead())
using (var streamReader = new StreamReader(classicStream))
{
while (streamReader.Peek() >= 0)
{
sRet = streamReader.ReadLine();
}
}
}
return sRet;
}
當有問題的文件不存在,IDE將拋出一個錯誤:
我應該
1)讓IDE調試華納忽略這個錯誤(說「不要打破這個異常」),我應該讓「if(file!= null)」做這個工作
2)或者我應該檢查文件是否真的存在
3)使用try-catch?
我不得不根據答案添加的代碼的重要組成部分:
private async Task <bool> LocalExists(string uFileName)
{
bool b = false;
//https://stackoverflow.com/questions/8626018/how-to-check-if-file-exists-in-a-windows-store-app
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(uFileName);
b = (file != null);
}
catch (Exception ex)
{
b = false;
}
return b;
}
這將引發同樣的異常,因爲在UWP,似乎有檢查沒有別的辦法,如果一個文件不是試圖訪問實際存在它:
How to check if file exists in a Windows Store App?
所以問題仍然存在。
切勿使用異常來驅動你的代碼流。調用之前的File.Exists將避免很多麻煩。 (不是100%安全,但仍然....) – Steve