如果xml文件不存在

时间:2012-04-19 19:24:49

标签: c# asp.net gridview xmldatasource

我正在使用ASP.NET C#并使用XmlDataSource工具编写了一个页面来读取xml文件并在GridView中显示数据。当文件存在时,一切都很棒。但是,xml文件每小时生成一次,如果您在更新文件时碰巧连接到页面(大约需要2分钟),则会显示错误(因为文件不存在)。当我使用内置工具连接和读取xml时,是否有代码可用于检查文件是否存在,如果不存在,则打开没有文件的页面。

我可以看到有代码可以存在,但是我似乎无法找出“做什么?”的部分。忽略XMLDataSource工具。也许我可以制作一个标签,表示会在几分钟内回来,但我如何让它忽略数据阅读器呢?

if (!File.Exists(filename))
{
     // what to do?
}  

2 个答案:

答案 0 :(得分:2)

如果您尝试以这种方式使用File.Exists,那么您会感到失望。

假设您的代码以最简单的方式运行:

if (!File.Exists(filename))
{
    // Tell user that file isn't there.
}
else
{
    // The file exists, so now go party on it.
    DoSomething(filename);
}

因此您的程序确定该文件存在。但在调用DoSomething之前,创建该文件的进程会打开它以进行独占访问。您的DoSomething方法将失败。因此,检查文件的存在是无关紧要的。

是的,这是一个非常小的窗口。我可以从经验告诉你,事情确实发生在那些非常小的窗户内。我被类似于上面的代码所困扰。

我强烈建议您编写代码,以便它处理文件不存在时引发的FileNotFoundException(或任何异常)。例如:

try
{
    DoSomething(filename);
    // now format the page as normal
}
catch (FileNotFoundException)
{
    // notify user that the file wasn't found
}

通过这种方式,没有其他过程可以从你身下拉出地毯。你知道该文件存在,因为你打开它。

答案 1 :(得分:0)

这是我的解决方案。我改变变量名来保护无辜者。非常感谢Jim Mischel ......

protected void Page_Load(object sender, EventArgs e)
{
    string xmlFile = Server.MapPath("~/App_Data/file.xml");

    try
    {
        XmlDataSource1.DataFile = xmlFile;
        XmlDataSource1.GetXmlDocument();
    }
    catch (Exception ex)
    {
        lblErrorMessage.Visible = true;
        gridView1.Visible = false;
        formView1.Visible = false;
    }
}