【发布时间】:2010-10-19 11:02:26
【问题描述】:
好的,所以我从How to check if a open file has been updated 了解到我应该使用FileSystemWatcher 来监视文件的更改。那么现在,问题是如果我必须跟踪许多文件,我是否为每个文件创建 1 个观察者?此外,一旦文件关闭,我必须以某种方式处理观察者。有一个Dictionary<string, FileSystemWatcher> 存储文件路径和FileSystemWatcher 是要走的路吗?当我打开更多文件时,我会添加更多观察者,当我关闭时,适当地处置观察者。有太多的观察者会是一件坏事吗?
更新
我刚刚做了
protected void AttachFileMonitor(EditorTabViewModel tab)
{
string file = tab.FilePath;
if (!_fsWatchers.ContainsKey(file))
{
var watcher = new FileSystemWatcher();
watcher.Path = Path.GetDirectoryName(file);
watcher.Filter = Path.GetFileName(file);
watcher.Changed += (s, e) =>
{
string message = "";
string caption = "";
MessageBoxButton buttons = MessageBoxButton.YesNo;
MessageBoxImage image = MessageBoxImage.Question;
MessageBoxResult defaultResult = MessageBoxResult.Yes;
MessageBoxResult result = _dialogSvc.GetMessageBox(message, caption, buttons, image, defaultResult);
if (result == MessageBoxResult.Yes)
{
tab.Open(file);
}
};
_fsWatchers.Add(file, watcher);
}
}
protected void DetachFileMonitor(EditorTabViewModel tab)
{
if (_fsWatchers.ContainsKey(tab.FilePath)) {
_fsWatchers.Remove(tab.FilePath);
}
}
我发现Changed() 永远不会被触发...
【问题讨论】:
-
将 EnableRaisingEvents 设置为 true :)
标签: c# io filesystemwatcher