0

FileSystemWatcher用来跟踪目录的更改。问题是我必须跟踪并修改我正在监视的任何最近创建的子目录。到目前为止,我只是使用Change事件检测到一些更改,检查是否是一个目录并为该子目录FullPath创建一个新实例。FileSystemWatcher

private static void StartMonitoringDir(string dir)
        {
            var fileWatcher = new FileSystemWatcher(dir)
            {
                EnableRaisingEvents = true,
                Filter = "*.exe"
            };

            var folderWatcher = new FileSystemWatcher(dir)
            {
                EnableRaisingEvents = true
            };

            fileWatcher.Created += FileWatcherOnCreated;
            fileWatcher.Changed += FileWatcherOnChanged;
            folderWatcher.Created += FolderWatcherOnCreated;
        }

private static void FolderWatcherOnCreated(object sender, FileSystemEventArgs e)
        {
            var attr = File.GetAttributes(e.FullPath);

            if (attr != FileAttributes.Directory) return;

            StartMonitoringDir(e.FullPath);
        }

所以,这就是问题所在。一旦我创建了一个目录,Changed就会使用名称引发事件"New Folder",因此当用户重命名此文件夹并在其中进行修改时,我会得到文件夹的旧名称,"New Folder"而不是用户命名的名称。我无法知道文件夹的新名称是什么,也无法进行修改,因为我的目录名称错误。

4

1 回答 1

1

如果您不需要担心有人留下“新文件夹”文件夹,我会删除您的“FolderWatcherOnCreated”事件处理程序,而是使用FileSystemWatcher.Renamed 事件处理程序。

像这样的东西可能对你有用(我没有测试过代码):

folderWatcher.Renamed += FolderWatcherOnRenamed;

private static void FolderWatcherOnRenamed(object sender, RenamedEventArgs e)
{

    var attr = File.GetAttributes(e.FullPath);

    if (attr == FileAttributes.Directory && e.OldName == "New Folder")
    {

        StartMonitoringDir(e.FullPath)
    }
}
于 2013-04-28T03:07:52.830 回答