【问题标题】:Using FileSystemWatcher to detect folder rename使用 FileSystemWatcher 检测文件夹重命名
【发布时间】:2018-12-11 17:15:38
【问题描述】:

我有一个基于文件的应用程序。除了目录重命名之外,FileSystemWatcher 对于我的大多数用途都可以正常工作。下面是代码示例:

   class Program
{
    static void Main(string[] args)
    {
        var directoryWatcher = new FileSystemWatcher("D:\\Test")
        {
            NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.Attributes | NotifyFilters.FileName | NotifyFilters.LastAccess |
                              NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size,
            Filter = "*.*"
        };
        directoryWatcher.EnableRaisingEvents = true;
        directoryWatcher.IncludeSubdirectories = true;
        directoryWatcher.Changed += FolderChanged;
        directoryWatcher.Created += FolderCreated;
        directoryWatcher.Deleted += FolderDeleted;
        directoryWatcher.Renamed += FolderRenamed;
        Console.ReadLine();
    }

    private static void FolderRenamed(object sender, RenamedEventArgs e)
    {
    }

    private static void FolderDeleted(object sender, FileSystemEventArgs e)
    {
    }

    private static void FolderCreated(object sender, FileSystemEventArgs e)
    {
    }

    private static void FolderChanged(object sender, FileSystemEventArgs e)
    {
    }
}

在 d:\Test 里面有一个文件夹。一旦我重命名它,什么都没有发生。我没有收到任何事件。

有什么想法吗?

谢谢

阿米特

【问题讨论】:

  • 我已注册所有 4 个活动。对于文件夹,我永远不会得到重命名事件,只是改变了
  • 这个问题有点混乱,你是在寻找目录的重命名事件吗?
  • @un-lucky 是的,我是。我好像听不懂。
  • 您已使用-= FolderRenamed; 取消注册FolderRenamed 事件,使用+= 注册这些事件

标签: c# directory filesystemwatcher


【解决方案1】:

您的代码没问题,但您缺少通知器

 watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
       | NotifyFilters.FileName | NotifyFilters.DirectoryName;

还有

// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);

在这里查看完整的代码示例
https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.renamed(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多