使用Try / Catch检查文件是否存在

时间:2012-07-26 06:54:51

标签: c# if-statement try-catch

我是关于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
}

7 个答案:

答案 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)

与此问题相关,以下主题将会很有趣

http://social.msdn.microsoft.com/Forums/en-NZ/winappswithcsharp/thread/1eb71a80-c59c-4146-aeb6-fefd69f4b4bb

在窗口8中更改了File.Exists API,解释是:

  

目前检查文件是否存在的唯一方法是捕获FileNotFoundException。正如已经指出有一个明确的检查和开放是一个竞争条件,因此我不希望有任何文件存在API添加。我相信File IO团队(我不在那个团队,所以我不确定,但这是我所听到的)正在考虑让这个API返回null而不是在文件不存在时抛出。< / p>

使用File.Exists的方法不是线程安全的,它已从Windows 8中的API中删除。所以只需捕获FileNotFoundException