删除文件系统观察者正在监视的文件夹

本文关键字:监视 文件夹 文件系统 观察者 删除 | 更新日期: 2023-09-27 17:57:12

我想创建一个应用程序,而不是只监视根层次结构文件夹,...我单独监视每个文件夹(监视子文件夹已关闭)

但是,我似乎无法正确执行删除逻辑。我希望能够删除层次结构中的任何文件夹,无论是在应用程序内部还是在外部,例如通过Windows资源管理器。

当我尝试其中任何一个时,似乎我遇到了锁定问题,因为删除命令无法执行。

如果我禁用观看,那么一切似乎都正常。所以我假设问题是试图删除正在监视的文件夹。

有没有办法解决这个问题?理想情况下,我希望文件系统观察者在删除其监视的文件夹时自动停止监视。

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;

删除文件系统观察者正在监视的文件夹

目前,您正在使用 fsw1 和 fsw2 来监视可能随时删除的任何类型的数据。

虽然,我不认为为每个文件夹创建 FSW 有什么意义,但这里有一个可能会有所帮助的答案:

为了监视文件夹本身,您需要为要观察的每个文件夹创建一个 FSW。

然后,您可以将 FSW 的通知过滤器设置为目录名称,如下所示:folderSystemWatcher.NotifyFilter = NotifyFilter.DirectoryName

请参阅此处的示例。

因此,其中一个 FSW 告诉您一个文件夹已删除,然后您可以停止、处置或对正在监视该已删除文件夹的 FSW 执行任何操作。

我没有尝试过,但这就是我会做到的,我想......