好的,所以我是从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()
永远不会被触发...
最佳答案
如果您为每个目录创建一个观察程序就足够了(并且您可以选择让观察程序监视整个目录树。)然后您可以使用事件将更改的文件与您感兴趣的文件列表进行比较.
我建议您为观察者创建某种“保姆”类,以确保您不会处置事件观察者或创建重复项。只是一个提示:)
顺便说一句,是的,有一个限制,你不能创建无限的观察者。在特定情况下这可能会成为问题,但最有可能的是,您的情况并非如此
关于C#:使用 FileSystemWatcher 监视文件的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3967658/