当前位置: 首页 > 知识库问答 >
问题:

不可捕获的IOException

祁俊拔
2023-03-14

ASPX。NET应用程序,使用XDocument。Load()从XML文件中读取。有时它会抛出IOException static,说明文件无法打开,因为它正被另一个进程使用。我无法通过打开文件并重新加载网站来随意重新创建它。但更奇怪的是,异常发生在Try-Catch块中,我在其中显式捕获系统。IOException。

这是堆栈:

异常类型:IOException

线程信息:线程ID:18线程帐户名称:NT AUTHORITY\NETWORK SERVICE正在冒充:假堆栈跟踪:在System. IO.__Error. WinIOError(Int32 errorCode,String maybeFullPath)在System. IO. FileStream. Init(String path,FileMode模式,FileAccess访问,Int32权限,Boolean useght,FileShare共享,Int32缓冲区大小,FileOptions选项,SECURITY_ATTRIBUTESsecAttrs,String msgPath,Boolean bFromProxy,Boolean useLongPath)在System. IO. FileStream. ctor(String path,FileMode模式,FileAccess访问,FileShare共享,Int32缓冲区大小)在System. Xml. XmlDownloadManager. GetStream(Uri uri,ICrepedia als凭据,IWebProxy代理,Request estCachePolicy缓存策略)在System. Xml. XmlUrlResolver. GetEntity(Uri绝对在System. Xml. Linq. XDocument. Load(String uri,LoadOptions选项)中创建(String inputUri,XmlReaderSetting设置,XmlParserContext inputContext)。Xml. Linq。XDocument. Load(String uri)

在StatTick。控件。ChartSlider.getXMLFile(String url)在远程路径\StatTick\控件\ChartSlider.ascx.cs:在StatTick的第27行。控件。ChartSlider。Page_Load(对象发送者,EventArgs e)在远程路径\StatTick\控件\ChartSlider.ascx.cs:第21行

代码如下:

private XDocument getXMLFile(string url)
    {
        XDocument tempDoc;

        t("Looking For XML File");
        int tryCount = 0;
        //string URL = "~/tempCharts/imageList.xml";
        while (tryCount++ < 10)
        {

            try
            {
                tempDoc = XDocument.Load(Server.MapPath(url));
                return tempDoc;
            }
            catch (IOException)
            {
                t("Error accessing XML File, sleeping for 10ms and then trying again\r\nTryCount: " + tryCount.ToString());
                Thread.Sleep(10);
                continue;

            }
        }

        return null;
    }

希望有人能为我提供一些关于这件事的见解。

谢啦

编辑好这里是我所做的,我将做一些测试,以验证它不再抛出感谢快速反应!:

while (tryCount <= 10)
        {
            try
            {
                using (FileStream fStream = new FileStream(Server.MapPath(url), FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    XDocument xDoc = XDocument.Load(fStream);

                    foreach (XElement xe in xDoc.Descendants("ImageUrl"))
                    {
                        t("Added: " + xe.Value);
                        tempImageUrlList.Add(xe.Value);
                    }
                    t("Done with Image List!");
                }
                return tempImageUrlList;
            }
            catch (Exception)
            {
                t("Error access XML File, sleeping for 10ms and then trying again\r\nTryCount: " + tryCount.ToString());
                Thread.Sleep(10);
                continue;
            }
        }

共有2个答案

郎同化
2023-03-14

我认为错误是由于门禁权限的文件,所以请给读/写权限的文件,然后尝试读取文件。

白星渊
2023-03-14

改为使用流,并使用它加载XML。您可以确保使用using语句关闭了底层流。

using (Stream s = File.OpenRead(Server.MapPath(url)))
{
        XDocument.Load(s);
}

using (FileStream fs= new FileStream(Server.MapPath(url), FileMode.Open,
                                          FileAccess.Read, FileShare.Read))
{
        XDocument.Load(fs);
}

;

 类似资料:
  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 我试图用selenium和Firefox捕获http://www.flipkart.com url的屏幕。 它拍摄整个页面的屏幕快照,但它显示的内页图像对许多其他图像不可用。我无法纠正它。帮帮我.

  • 我正在查看Java SE7的新功能,目前我正在: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html 关于捕获多重功能,当我遇到这个语句时: 注意:如果一个捕捉块处理多个异常类型,那么捕捉参数是隐式最终的。在这个例子中,捕捉参数ex是最终的,因此您不能在捕捉块中给它赋值。 我从未注意到

  • 考虑以下几点: 为什么第一个版本是编译错误,当我已经声明lambda是可变的,并通过值捕获(我认为是它的副本)? 使用clang(x86_64-apple-darwin14.3.0)和Visual C(vc120)进行测试,这是错误消息的来源。

  • 请求(正文)

  • 我使用以下代码设置了一个异常处理程序 我正在使用Spring Security 3.1。当我尝试在没有身份验证的情况下执行操作时,应用程序会引发 AccessDeniedException。它永远不会出现这种方法。但与其他例外情况一样工作正常。这是它应该工作的方式吗?还是我的代码有问题? 这看起来像一个解决方案。但是,如果我能在一个点上处理异常,那就更好了。 这是我的配置文件 更新 此处,用户未通