如何捕获“FileNotFoundException”异常?

问题描述 投票:-2回答:5

我是编程新手,我想弄清楚如何捕获错误“FileNotFoundException”。我的代码是为了搜索现有的文本文档(从输入到文本框中的内容)并将其加载到我的listbox1。我解决了这个问题。但是,出现了一个新问题!如果用户输入了错误的名称/数字,它只会使应用程序崩溃,导致无法找到该文件。有没有办法让程序显示错误消息“找不到文件”。或者根本不崩溃整个程序?提前致谢!

     private void btnEnter_Click(object sender, EventArgs e)
    {   
        FileInfo file = new FileInfo(txtExisting.Text + ".txt");
        StreamReader stRead = file.OpenText();
        while (!stRead.EndOfStream)
        {
            listBox1.Items.Add(stRead.ReadLine()); 
        }  
    }
c# filenotfoundexception
5个回答
5
投票

您应该使用try-catch语句来处理异常。

private void btnEnter_Click(object sender, EventArgs args)
{   
    try{
        FileInfo file = new FileInfo(txtExisting.Text + ".txt");
        StreamReader stRead = file.OpenText();
        while (!stRead.EndOfStream)
        {
            listBox1.Items.Add(stRead.ReadLine()); 
        }  
    } 
    catch (FileNotFoundException e)
    {
        // FileNotFoundExceptions are handled here.
    }
}

基本上,try部分中的代码将按正常情况执行,但如果出现错误,将执行catch语句,特别是:

抛出异常时,公共语言运行库(CLR)会查找处理此异常的catch语句。

这意味着如果您希望遇到不同类型的异常,try-catch语句可以有多个catch块,因此可以相应地处理它们。

更多信息可以在here找到。

对于用户体验,通过显示消息与用户沟通出错是很好的。


3
投票

只需在btnEnter_Click函数中添加一个带有代码的try / catch块,如下所示:

try
{
   //your code here
}
catch (FileNotFoundException ex)
{
    MessageBox.Show(ex.Message);//if you want to show the exception message
}
catch (Exception ex1)
{
    /* Exceptions other than the above will be handled in this section,
     this should be used when you are not  aware the type of exception 
     can occur in your code for a safe side*/
}

3
投票

使用try/catch声明:

private void btnEnter_Click(object sender, EventArgs e)
{   
    try
    {
        FileInfo file = new FileInfo(txtExisting.Text + ".txt");
        StreamReader stRead = file.OpenText();
        while (!stRead.EndOfStream)
        {
            listBox1.Items.Add(stRead.ReadLine()); 
        }  
    }
    catch (FileNotFoundException ex)
    {
        // Handle exception
    }
}

2
投票

使用System.IO.File.Exist("path\\File.extension");

File.Exists / MSDN它将为File Found返回一个布尔值true,为File Not Found返回false。如果不这样做,可以使用try / catch语句可能导致问题。

例:

private void btnEnter_Click(object sender, EventArgs e)
    {   
        if(!System.IO.File.Exists(txtExisting.Text + ".txt")
        {
              MessageBox.Show("File not found");
              return;
        }
        FileInfo file = new FileInfo(txtExisting.Text + ".txt");
        StreamReader stRead = file.OpenText();
        while (!stRead.EndOfStream)
        {
            listBox1.Items.Add(stRead.ReadLine()); 
        }  
    }

0
投票
        FileInfo file = new FileInfo(txtExisting.Text + ".txt");
        if (!File.Exists(file.FullName))
        {
            Console.WriteLine("File Not Found!");
        }
        else
        {
            StreamReader stRead = file.OpenText();
            while (!stRead.EndOfStream)
            {
                lenter code hereistBox1.Items.Add(stRead.ReadLine());
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.