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