Ok, j'ai donc appris de How to check if a open file has been updated que je devrais utiliser un FileSystemWatcher pour surveiller les modifications apportées aux fichiers. Alors maintenant, la question est de savoir si je dois garder la trace de nombreux fichiers, puis-je créer 1 observateur pour chaque fichier? De plus, je dois en quelque sorte disposer de l'observateur une fois le fichier fermé. Avoir un Dictionary<string, FileSystemWatcher>
stocker le chemin de fichier et le FileSystemWatcher
le chemin à parcourir? à mesure que j'ouvre plus de fichiers, j'ajoute plus d'observateur et, au fur et à mesure que je ferme, je dispose des observateurs de manière appropriée. Est-ce que le fait d'avoir trop de spectateurs sera une mauvaise chose?C#: Utilisation de FileSystemWatcher pour surveiller les modifications apportées aux fichiers
MISE À JOUR
Je viens de
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);
}
}
J'ai trouvé que Changed()
ne se déclenche ...
Définir EnableRaisingEvents sur true :) – Onkelborg