gpt4 book ai didi

c# - 使用FileSystemWatcher检测xml文件,使用Linq读取xml文件提示结果错误 "Root Element is Missing"

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:04 24 4
gpt4 key购买 nike

我的应用程序已经可以运行它可以检测到xml文件并提示xml文件的内容但有时会提示“缺少根元素”,有时也可以,但是当我打开xml文件时,它是好的,上面有内容。如何解决这个问题。

错误截图如下:

enter image description here

代码如下:

private void fileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
{
string invoice = "";
using (var stream = System.IO.File.Open(e.FullPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite))
{
var doc = System.Xml.Linq.XDocument.Load(stream);
var transac = from r in doc.Descendants("Transaction")
select new
{
InvoiceNumber = r.Element("InvoiceNumber").Value,
};

foreach (var i in transac)
{
invoice = i.InvoiceNumber;
}
}

MessageBox.Show(invoice);
fileSystemWatcher.EnableRaisingEvents = false;
}

错误出现在这里 var doc = System.Xml.Linq.XDocument.Load(stream);

最佳答案

当文件发生变化时,FileSystemWatcher 会很快引发事件。有可能在你读取文件之前写操作还没有完成。

要对此进行测试,请在读取文件之前添加一个 Thread.Sleep(100); 作为快速解决方法。

为了获得更好的解决方案,请不要以共享模式打开文件,而是尝试是否可以独占打开它。如果失败,请等待几毫秒,然后重试 - 直到您可以独占打开文件。还要注意事件可能会被多次触发 - 这取决于其他任务如何写入文件。

关于c# - 使用FileSystemWatcher检测xml文件,使用Linq读取xml文件提示结果错误 "Root Element is Missing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13536535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com