【问题标题】:How do I close an XMLDocument in C#如何在 C# 中关闭 XMLDocument
【发布时间】:2017-01-09 08:34:50
【问题描述】:

我正在将 XML 文件中的信息导入 SQL 数据库。导入工作正常,但某些 XML 文件中有错误,因此代码失败。我捕捉到异常并尝试将文件移动到错误文件夹,但正如我之前从文件中读取的那样,我收到一条错误消息,指出该文件正在被另一个进程使用。我已经搜索过,但还没有遇到任何治愈这个问题的方法。我已尝试保存文档,但在尝试移动时仍在使用,下面是我尝试移动文件以供参考的代码示例。任何有关如何解决此问题的建议都会很棒,并提前感谢您提供的信息。

XmlDocument doc = new XmlDocument();
try
{
    doc.Load(st);
}
catch(Exception ex)
{
    doc.Save(st);
    if (File.Exists(st))
        File.Move(st, st + "\\Error");
}

【问题讨论】:

  • 你能指定你的文件夹结构吗?您的 XML 文件当前存在于何处以及您尝试将其移动到何处?
  • 您确定是 XMLDocument 保持打开状态吗?它不应该这样做,因为它只是加载它,就是这样。
  • XmlDocument 无法加载文件内容,但文件仍在使用中。不要尝试移动文件,只需复制它,稍后再执行清理。
  • 文件夹结构如下,main/in是导入文件夹,一旦出现错误,我会尝试将其移至main/error。当我将文件正确导入到完整文件夹时,移动工作正常。
  • 看到这个话题:stackoverflow.com/questions/11015965/… 我认为 doc = null 和 GC.Collect 会帮助你。

标签: c# sql asp.net .net


【解决方案1】:

试试

XmlDocument doc = new XmlDocument();
try
{
    doc.Load(st);
}
catch(Exception ex)
{
    //doc.Save(st);                      -- why do you need to save a file that exists?
    //if (File.Exists(st))               -- it returns always true
    //    File.Move(st, st + "\\Error"); -- wrong path

    File.Move(st, Path.Combine("C:\\Error", Path.GetFileName(st)));
}

【讨论】:

  • 这很有效,谢谢,保存,检查是否存在等只是测试不同的东西,看看它是否释放了文件。谢谢
猜你喜欢
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2018-04-17
相关资源
最近更新 更多