Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从FileSystemEventTargets.FullPath访问目录,目录名错误_C#_Filesystemwatcher - Fatal编程技术网

C# 无法从FileSystemEventTargets.FullPath访问目录,目录名错误

C# 无法从FileSystemEventTargets.FullPath访问目录,目录名错误,c#,filesystemwatcher,C#,Filesystemwatcher,我正在使用FileSystemWatcher跟踪目录中的更改。问题是,我必须跟踪并修改我正在监视的目录中最近创建的任何子目录。到目前为止,我只是使用change事件检测一些更改,检查FullPath是否是一个目录,并为该子目录创建FileSystemWatcher的新实例 private static void StartMonitoringDir(string dir) { var fileWatcher = new FileSystemWatcher(

我正在使用
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);
        }

所以,问题出在这里。一旦我创建了一个目录,
更改
事件将以
的“新文件夹”
名称引发,因此当用户重命名此文件夹并在其中进行修改时,我会得到文件夹的旧名称,
“新文件夹”
,而不是用户指定的名称。我无法知道文件夹的新名称,也无法进行修改,因为我的目录名称错误。

如果您不必担心有人留下“新文件夹”文件夹,我会删除您的“FolderWatcherOnCreated”事件处理程序,改为使用事件处理程序

类似这样的东西可能对您有用(我还没有测试代码):

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)
    }
}