我是关于Try / Catch的新手。在下面的代码中,我有一个简单的测试来检查文件是否存在。在我的C#课程中,我必须使用Try / Catch,我不知道如何使用它,我是否仍然在Try部分内部使用if语句,或者是否有更好的方法来检查文件是否存在在里面试试?如果文件是简单的txt文件或序列化文件,有什么区别吗?
if (File.Exists("TextFile1.txt"))
{
MessageBox.Show("The file don't exist!", "Problems!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
我必须使用的尝试/捕捉方式
try
{
code to check if file exist here
}
catch
{
error message here
}
答案 0 :(得分:10)
try
{
if (!File.Exists("TextFile1.txt"))
throw new FileNotFoundException();
}
catch(FileNotFoundException e)
{
// your message here.
}
答案 1 :(得分:6)
如果要在不使用File.Exist
的情况下检查文件是否存在,则可以尝试在try块中打开文件,然后捕获异常FileNotFoundException。
try
{
// Read in non-existent file.
using (StreamReader reader = new StreamReader("TextFile1.txt"))
{
reader.ReadToEnd();
}
}
catch (FileNotFoundException ex)
{
MessageBox.Show("The file don't exist!", "Problems!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// Write error.
Console.WriteLine(ex);
}
答案 2 :(得分:6)
试试这个:
try
{
if(!File.Exist("FilePath"))
throw new FileNotFoundException();
//The reste of the code
}
catch (FileNotFoundException)
{
MessageBox.Show("The file is not found in the specified location");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
答案 3 :(得分:2)
您已经检查了第一个代码段中是否存在文件。没有任何需要,此代码位于try/catch
块内。
答案 4 :(得分:2)
使用throw
:
try
{
if (!File.Exists("TextFile1.txt"))
throw (new Exception("The file don't exist!"));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
答案 5 :(得分:0)
当您遇到意外错误或者“期望”访问资源时出现错误时,您只能使用try / catch。这听起来有点混乱,但在你的事业中,没有。
但是,如果您在不检查文件是否存在的情况下以流的形式打开文件,那么就需要进行try..catch。
总而言之,try..catch应该用于安全性,代码是复杂/长度的。
答案 6 :(得分:0)
与此问题相关,以下主题将会很有趣
在窗口8中更改了File.Exists API,解释是:
目前检查文件是否存在的唯一方法是捕获FileNotFoundException。正如已经指出有一个明确的检查和开放是一个竞争条件,因此我不希望有任何文件存在API添加。我相信File IO团队(我不在那个团队,所以我不确定,但这是我所听到的)正在考虑让这个API返回null而不是在文件不存在时抛出。< / p>
使用File.Exists的方法不是线程安全的,它已从Windows 8中的API中删除。所以只需捕获FileNotFoundException