【问题标题】:Getting file use exception using FileSystemWatcher使用 FileSystemWatcher 获取文件使用异常
【发布时间】:2014-10-18 21:41:59
【问题描述】:

所以我正在这样做:

public MainWindow()
{
    InitializeComponent();

    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = "F:\\Scoreboard Assistant\\output\\";
    watcher.Filter = "event.xml";
    watcher.NotifyFilter=NotifyFilters.LastWrite;
    watcher.Changed += new FileSystemEventHandler(file_Changed);
    watcher.EnableRaisingEvents = true;
}

private void file_Changed(object sender, FileSystemEventArgs e)
{
    XmlDocument config = new XmlDocument();
    config.Load(e.FullPath.ToString());
    string text1 = config.SelectSingleNode("event/text1").InnerText;
    string text2 = config.SelectSingleNode("event/text2").InnerText;
}

我正在做的是观察对特定 XML 文件的更改。然后,如果检测到文件发生更改,它将读取 XML 文件并从中提取变量。但是,当我运行代码时,出现以下错误:

System.Xml.dll 中出现“System.IO.IOException”类型的未处理异常

附加信息:该进程无法访问文件“F:\Scoreboard Assistant\output\event.xml”,因为它正被另一个进程使用。

我该如何解决这个问题?

【问题讨论】:

    标签: c# filesystemwatcher


    【解决方案1】:

    FileSystemWatcher 可以在写入文件时引发多个写入事件。事实上,每次缓冲区刷新都会引发一个事件。此错误表示其他进程写入文件,但尚未完成

    你如何处理这个问题?只需忽略此错误,然后在您收到的下一个写入事件上重试。您可能会看到文件被锁定的几个写入事件,但当您收到最后一个事件时,它应该已被其他进程解锁。

    【讨论】:

    • 谢谢。我没有意识到 changed 事件会被触发这么多次。将我的代码放入一个空的 try-catch 中修复了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多