我正在使用ASP.NET C#并使用XmlDataSource工具编写了一个页面来读取xml文件并在GridView中显示数据。当文件存在时,一切都很棒。但是,xml文件每小时生成一次,如果您在更新文件时碰巧连接到页面(大约需要2分钟),则会显示错误(因为文件不存在)。当我使用内置工具连接和读取xml时,是否有代码可用于检查文件是否存在,如果不存在,则打开没有文件的页面。
我可以看到有代码可以存在,但是我似乎无法找出“做什么?”的部分。忽略XMLDataSource工具。也许我可以制作一个标签,表示会在几分钟内回来,但我如何让它忽略数据阅读器呢?
if (!File.Exists(filename))
{
// what to do?
}
答案 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;
}
}