使用FileSystemWatcher获取文件使用异常

时间:2014-10-18 21:42:00

标签: c# filesystemwatcher

所以我这样做:

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.IO.IOException'发生在System.Xml.dll

中      

其他信息:该进程无法访问文件' F:\ Scoreboard Assistant \ output \ event.xml'因为它正被另一个进程使用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

你怎么处理这个?只需忽略此错误,然后再次尝试接收下一个写入事件。您可能会看到文件被锁定的几个写入事件,但是当您收到最后一个事件时,它应该已被其他进程解锁。