我是编程新手,我想弄清楚如何捕获错误“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());
}
}
您应该使用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找到。
对于用户体验,通过显示消息与用户沟通出错是很好的。
只需在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*/
}
使用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
}
}
使用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());
}
}
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());
}
}