File.Exists返回true然后filestream抛出FileNotFoundException仅登录控制台

时间:2018-02-20 16:15:00

标签: c# .net xml file-not-found

在我的序列化类中,我有一个方法,它使用我的Settings类的实例反序列化xml文件。没有其他任何东西可以触及文件,文件不应该被程序中的任何东西删除 这只发生在应用程序的启动例程中(在主窗体的load事件中调用)。

if (!File.Exists("Settings.xml"))
{
    return new Settings();
}

XmlSerializer xSerializer = new XmlSerializer(typeof(Settings));
using (FileStream fS = new FileStream("Settings.xml", FileMode.Open)) //Exception thrown.
using (XmlReader xRead = XmlReader.Create(fS))
{
    return (Settings)xSerializer.Deserialize(xRead);
}

当我的程序到达第一个“using”语句(通过断点确认)时,Visual Studio将以下两行添加到输出窗口:

  

抛出异常:mscorlib.dll中的'System.IO.FileNotFoundException'

     

抛出异常:mscorlib.dll中的'System.IO.FileNotFoundException'

然后成功反序列化设置文件 这特别奇怪,因为我没有得到任何其他错误通知。我无法弄清楚导致这种情况的原因,虽然它对程序没有任何可观察到的影响,但我不愿意抛弃这个异常,因为它可能会产生其他影响。

造成这些例外的原因是什么?

2 个答案:

答案 0 :(得分:2)

简答:如果您的代码有效,请不要担心。

更长的回答:它可能正在寻找另一个无法找到的文件。

如果确实想知道导致它的原因,请下载并运行Process Monitor。它将向您展示每个流程正在做什么。您可以使用此页面了解如何设置过滤器,以便只查看您的流程正在执行的操作:https://blogs.technet.microsoft.com/appv/2008/01/24/process-monitor-hands-on-labs-and-examples/

设置几个过滤器,例如“Process Name是[你的exe文件]”和“Result is not SUCCESS”。有可能,你会发现找不到一些你甚至不关心的文件:)

答案 1 :(得分:1)

首先让我这样说,如果你的代码有效,那就意味着你的文件中没有一个丢失,而且可能与你的代码无关。

我环顾四周,发现这个错误

  

抛出异常:' System.IO.FileNotFoundException'在mscorlib.dll中

当尝试加载一些standard.net类库时甚至会发生这种情况,因为错误发生在mscorlib.dll中,这是一个基类库: https://forums.asp.net/t/2077697.aspx?+System+IO+FileNotFoundException+in+mscorlib+dll+when+loading+standard+net+class+library

所以它可能就是这样的东西,即使你找到它也不会做太多的文件并且只需要你一段时间来修复它。因此,除非它引起一些问题,否则我建议只是忽略这一点并继续前进。