3

我对 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/Catch 方式

try
{
code to check if file exist here
}
catch
{
error message here
}
4

7 回答 7

10
try
{
 if (!File.Exists("TextFile1.txt"))
    throw new FileNotFoundException();
}
catch(FileNotFoundException e)
{
   // your message here.
}
于 2012-07-26T07:02:38.027 回答
7

如果你想在不使用的情况下检查文件是否存在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);
    }
于 2012-07-26T06:59:39.697 回答
7

尝试这个 :

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);
}
于 2012-07-26T07:02:56.453 回答
2

您已经在第一个片段中检查了文件的存在。没有任何必要,因为这段代码在try/catch块内。

于 2012-07-26T06:57:38.907 回答
2

使用throw

try
{
    if (!File.Exists("TextFile1.txt"))
        throw (new Exception("The file don't exist!"));
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
于 2012-07-26T07:00:17.573 回答
0

只有在遇到意外错误或“预期”访问资源时出现错误时,才使用 try/catch。这听起来有点令人困惑,但在你的事业中,两者都没有。

但是,如果您以流的形式打开以读取文件而不检查它是否存在,则需要尝试 try..catch。

总而言之,try..catch 应该用于安全性,以及代码复杂/长度的情况。

于 2012-07-26T07:00:08.157 回答
0

与此问题相关的以下线程将很有趣

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

File.Exists API 在窗口 8 中进行了更改,说明如下:

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

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

于 2012-07-26T07:03:35.210 回答