文件未找到,但文件在那里!

时间:2011-03-29 15:45:37

标签: c#

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”。

7 个答案:

答案 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)
{}