如何捕获监视文件夹删除事件

时间:2012-03-28 21:35:15

标签: c# filesystemwatcher

我有一个名为FileWatch的文件监视目录

 C:\Users\MyFolder\FileWatch\Test

FileWatch 文件夹是监视目录。我的应用程序正在接收FileWatch目录下发生的所有事件。

但是,如果我删除 FileWatch 文件夹本身,则不会生成任何文件系统事件。

如果用户删除了FileWatch目录,有没有办法捕获?

4 个答案:

答案 0 :(得分:4)

我建议您只需查看目录,或者您可以尝试使用计时器检查目录是否使用Directory.Exists删除。

编辑:如果您需要确保目录没有被删除,您可以在目录中创建和lock a file

答案 1 :(得分:2)

根据FileSystemWatcher类的描述,在被监视目录中更改/删除/创建/重命名文件或目录时会引发事件

所以,它不应该是在看目录本身。它仅监视目录中的文件和目录。

选项(如前所述) - 请注意目录C:\Users\MyFolder\FileWatch

更新: 如果您只想观看目录C:\Users\MyFolder\FileWatch\Test删除:

string path = @"C:\Users\MyFolder\FileWatch"; // watch for parent directory
if (!Directory.Exists(path)) // verify it exists before start
    return;

FileSystemWatcher watcher = new FileSystemWatcher(path);
// set option to track directories only
watcher.NotifyFilter = NotifyFilters.DirectoryName;

watcher.Deleted += (o, e) =>
{
    if (e.FullPath == @"C:\Users\MyFolder\FileWatch\Test")
    {
        // If you are here, your test directory was deleted
    }
};

watcher.EnableRaisingEvents = true;

答案 2 :(得分:1)

这对我有用,它使用阻止调用并且不需要事件。我确定有人会拒绝投票给我但是,如果这有助于某些人,那就是我在这里的原因!

using System.IO;

namespace Sapbucket.Common
{
    public static class FolderSupport
    {
        public static void DeleteFolder(string folderPath, bool recursively)
        {
            DirectoryInfo _directoryInfo;

            _directoryInfo = new DirectoryInfo(folderPath);
            _directoryInfo.Refresh();
            if (_directoryInfo.Exists)
            {
                _directoryInfo.Delete(recursively);

                while (_directoryInfo.Exists)
                    _directoryInfo.Refresh();
            }
        }
    }
}

答案 3 :(得分:0)

不是在FileWatcher文件夹上设置FileWatch实例,而是使用父文件夹(MyFolder)进行设置。这样,您可以在FileWatch文件夹中捕获文件事件,也可以在删除FileWatch文件夹本身时触发事件。