2011-03-29 59 views
0
public static List<Product> Load(string filename) 
{ 
    if (!File.Exists(filename)) 
    { 
     throw new FileNotFoundException("Data could not be found ", filename); 
    } 
} 

的Visual Studio 2010提供了以下异常, “FileNotFoundException异常”未找到文件,但该文件在那里!

emmm ..确定。这个问题似乎已经解决了。

但是,我仍然无法找到该文件!但该文件在那里,在同一个目录中,我已经验证并且双重验证名称是正确的!我不知道发生了什么事。

该文件被称为“Products.xml”。

+3

该文件可能未找到?这是你自己的例外 – BrokenGlass 2011-03-29 15:48:01

+0

我没有看到任何错误的代码。当你找不到'filename'所在位置指定的文件时,你期望发生什么? – 48klocs 2011-03-29 15:48:19

+1

愚蠢的Visual Studio。总是抛出异常! ;) – Mayank 2011-03-29 15:50:46

回答

1

该文件称为 “Products.xml”。

您将自己暴露于随机失败,并使用类似的文件名。您应该使用文件的完整路径名称,如c:\ mumble \ foo \ products.xml。如果你不这样做,那么你完全依赖于正确设置你的程序的工作目录。 Environment.CurrentDirectory的值。

即使通过启动你的程序(如桌面上的快捷方式)正确设置它,当你没有写入的代码改变了工作目录时,你仍然可能陷入困境。一个很好的例子是OpenFileDialog,其RestoreDirectory属性保留为默认值false。

在您的代码中始终使用完整路径名称。或让用户选择文件。

+0

谢谢,你是绝对正确的。 emm ..现在我刚刚用XML序列化器创建了一个流,让生活变得更加简单:) – RKM 2011-03-29 18:52:22

2

你是抛出异常的人。你的意思是提出一个错误信息?

+0

yap,我希望它输出一个错误信息,如果没有找到该文件。这就是说,该文件实际上存在于... – RKM 2011-03-29 15:52:35

0

位于filename不存在的文件,因此它投用以下行除外:throw new FileNotFoundException("Data could not be found ", filename);

您的意思是只输出错误?

+0

yap,我想输出一个错误,如果该文件没有找到,这是不是做到这一点? – RKM 2011-03-29 15:51:00

+0

@Rosie:为了给用户显示一个错误,你通常只给他们看一个'MessageBox'。你只会在致命条件下抛出异常。 – Kevin 2011-03-30 11:56:02

1

它看起来像问题是File.Exists返回false,你抛出一个异常,这是不是由你的代码处理。你是否打算处理这个异常,或者这对您的程序来说是一个致命的错误?

0

在您的代码中,首先检查空文件名,因为传递的参数可能为空字符串,另外在代码上应用try catch块,因为传递的文件名可能不满足文件的路径规则。通过你的例外来捕捉块。

0

您:

A)不希望通过此行抛出异常

抛出新FileNotFoundException异常()

,而是要显示一个对话框,将用户,或者在那里使用其他一些错误处理技术。输出错误或者使用下列之一:

Console.WriteLine("File not found") 
MessageBox.Show("File not found"); 

B)较高的在你的调用堆栈有一个try/catch和处理您的错误,对话或适合你的应用的另一个错误处理方法同样用。

try 
{ 
    Load(filename); 
} 
catch(FileNotFoundException fe) 
{}