public static List<Product> Load(string filename)
{
if (!File.Exists(filename))
{
throw new FileNotFoundException("Data could not be found ", filename );
}
}
Visual Studio 2010提供以下异常,“FileNotFoundException”
嗯,好吧。这个问题似乎已经解决了。但是,我还是找不到文件!但文件在那里,在同一目录中,我已经验证并且双重验证了名称是正确的!我不知道发生了什么。
该文件名为“Products.xml”。
答案 0 :(得分:2)
你是抛出异常的人。你的意思是提出错误信息吗?
答案 1 :(得分:1)
看起来问题是File.Exists
返回false并且您正在抛出一个不由您的代码处理的异常。您是否打算处理此异常,或者这是否对您的程序造成致命错误?
答案 2 :(得分:1)
如果运行代码的用户无法访问该文件,并且该文件不存在,则File.Exists可能会返回false。
http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx
答案 3 :(得分:1)
该文件名为“Products.xml”。
您将自己暴露于具有类似文件名的随机故障。您应该使用该文件的完整路径名,例如c:\ mumble \ foo \ products.xml。如果不这样做,那么您完全依赖于正确设置程序的工作目录。 Environment.CurrentDirectory的值。
即使任何程序启动都正确设置(如桌面上的快捷方式),当您未编写的代码更改工作目录时,仍然会遇到麻烦。一个很好的例子是OpenFileDialog,其RestoreDirectory属性保留为默认值false。
始终在代码中使用完整路径名。或者让用户选择文件。
答案 4 :(得分:0)
位于filename
的文件不存在,因此会使用以下行抛出异常:throw new FileNotFoundException("Data could not be found ", filename );
您的意思是输出错误吗?
答案 5 :(得分:0)
在你的代码中首先检查空文件名,因为传递的参数可能是空字符串,加上对代码应用try catch块,因为传递的文件名可能不满足文件的路径规则。在catch中阻止你的例外。
答案 6 :(得分:0)
你要么:
A)不想通过此行抛出异常
抛出新的FileNotFoundException()
而是希望向用户显示一个Dialog,或者在那里使用其他一些错误处理技术。要输出错误,请使用以下之一:
Console.WriteLine("File not found")
MessageBox.Show("File not found");
B)你的调用堆栈中的高位有一个try / catch并在那里处理你的错误,类似于对话框或适合你的应用程序的其他错误处理方法。
try
{
Load(filename);
}
catch(FileNotFoundException fe)
{}