J'aimerais créer une application où, au lieu de surveiller uniquement un dossier de la hiérarchie racine, ... Je surveille chaque dossier individuellement (en désactivant la surveillance des sous-dossiers).
Cependant, je ne parviens pas à mettre en place une logique de suppression correcte. Je veux pouvoir supprimer n'importe quel dossier de la hiérarchie, soit en interne dans l'application, soit en externe, par exemple via l'explorateur Windows.
Lorsque j'essaie l'une ou l'autre de ces méthodes, il semble que je rencontre des problèmes de verrouillage, car les commandes de suppression ne s'exécutent pas.
Si je désactive la surveillance, alors tout semble fonctionner. Je suppose donc que le problème est d'essayer de supprimer un dossier qui est surveillé.
Y a-t-il un moyen de contourner ce problème ? Idéalement, j'aimerais que le fileSystemWatcher arrête automatiquement de surveiller lorsque le dossier qu'il surveille a été supprimé.
public MainWindow()
{
InitializeComponent();
fsw1 = new FileSystemWatcher()
{
Path = "Folder",
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.FileName | NotifyFilters.DirectoryName,
IncludeSubdirectories = false,
Filter = "",
EnableRaisingEvents = true
};
fsw1.Deleted += new FileSystemEventHandler(OnFileSystemItemDeleted);
fsw2 = new FileSystemWatcher()
{
Path = "Folder/Folder",
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.FileName | NotifyFilters.DirectoryName,
IncludeSubdirectories = false,
Filter = "",
EnableRaisingEvents = true
};
fsw2.Deleted += new FileSystemEventHandler(OnFileSystemItemDeleted);
}
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
//fsw1.EnableRaisingEvents = false;
//fsw2.EnableRaisingEvents = false;
System.IO.Directory.Delete("Folder", true);
}
void OnFileSystemItemDeleted(object sender, FileSystemEventArgs e)
{
}
FileSystemWatcher fsw1, fsw2;