C# 如何使FileSystemWatcher在命名目录之前等待引发创建的事件?
我有一个C# 如何使FileSystemWatcher在命名目录之前等待引发创建的事件?,c#,events,filesystemwatcher,C#,Events,Filesystemwatcher,我有一个FileSystemWatcher,它在创建新目录时触发一个OnCreated事件。但目录名称始终是默认名称(newDirectory(1)) 是否可以等到确认目录名称后再进行操作?(用户焦点从ordners name文本框中消失)您不能直接钩住文件夹的创建和命名(这显然是两个事件)。相反,您可以创建自己的自定义类,在其中可以实现目标。以下是示例代码: class FolderCreationWatcher { private FileSystemWatcher watcher
FileSystemWatcher
,它在创建新目录时触发一个OnCreated
事件。但目录名称始终是默认名称(newDirectory(1))
是否可以等到确认目录名称后再进行操作?(用户焦点从ordners name文本框中消失)您不能直接钩住文件夹的创建和命名(这显然是两个事件)。相反,您可以创建自己的自定义类,在其中可以实现目标。以下是示例代码:
class FolderCreationWatcher
{
private FileSystemWatcher watcher = new FileSystemWatcher();
private string lastFileName = string.Empty;
public delegate void OnFolderCreated(object sender, FileSystemEventArgs e);
public event OnFolderCreated FolderCreated;
Timer timer = new Timer();
public FolderCreationWatcher(string dirPath, int timeOut)
{
watcher.Path = dirPath;
watcher.EnableRaisingEvents = true;
watcher.Created += watcher_Created;
timer.Interval = timeOut;
timer.Enabled = false;
timer.Elapsed += timer_Elapsed;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
this.NotifyFolderCreated();
}
private void watcher_Created(object sender, FileSystemEventArgs e)
{
lastFileName = e.Name;
watcher.Renamed += OnRenamed;
timer.Enabled = true;
}
void OnRenamed(object sender, RenamedEventArgs e)
{
if (e.OldName.Equals(lastFileName))
{
lastFileName = e.Name;
this.NotifyFolderCreated();
}
}
private void NotifyFolderCreated()
{
if (FolderCreated != null)
FolderCreated(this, new FileSystemEventArgs(WatcherChangeTypes.Created, watcher.Path, lastFileName));
timer.Enabled = false;
watcher.Renamed -= OnRenamed;
}
此类用法如下所示:
FolderCreationWatcher folderWatcher = new FolderCreationWatcher(dirPath, 5000);
folderWatcher.FolderCreated += OnFolderCreated;
void OnFolderCreated(object sender, FileSystemEventArgs e)
{
//Do Something
}
您不能直接钩住文件夹的创建和命名(这显然是两个事件)。相反,您可以创建自己的自定义类,在其中可以实现目标。以下是示例代码:
class FolderCreationWatcher
{
private FileSystemWatcher watcher = new FileSystemWatcher();
private string lastFileName = string.Empty;
public delegate void OnFolderCreated(object sender, FileSystemEventArgs e);
public event OnFolderCreated FolderCreated;
Timer timer = new Timer();
public FolderCreationWatcher(string dirPath, int timeOut)
{
watcher.Path = dirPath;
watcher.EnableRaisingEvents = true;
watcher.Created += watcher_Created;
timer.Interval = timeOut;
timer.Enabled = false;
timer.Elapsed += timer_Elapsed;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
this.NotifyFolderCreated();
}
private void watcher_Created(object sender, FileSystemEventArgs e)
{
lastFileName = e.Name;
watcher.Renamed += OnRenamed;
timer.Enabled = true;
}
void OnRenamed(object sender, RenamedEventArgs e)
{
if (e.OldName.Equals(lastFileName))
{
lastFileName = e.Name;
this.NotifyFolderCreated();
}
}
private void NotifyFolderCreated()
{
if (FolderCreated != null)
FolderCreated(this, new FileSystemEventArgs(WatcherChangeTypes.Created, watcher.Path, lastFileName));
timer.Enabled = false;
watcher.Renamed -= OnRenamed;
}
此类用法如下所示:
FolderCreationWatcher folderWatcher = new FolderCreationWatcher(dirPath, 5000);
folderWatcher.FolderCreated += OnFolderCreated;
void OnFolderCreated(object sender, FileSystemEventArgs e)
{
//Do Something
}
就文件系统而言,创建目录和随后的重命名操作是两个完全无关的事件。您不应该期望挂接到文件系统中的某些内容尝试关联them@CarlSixsmith-我想在JJS语言中,图像“Ordner”是“Folder”。@CarlSixsmith“Neuer Ordner”是德语。如果您想要新名称,然后还将侦听重命名事件,并仅触发代码延迟,以便您可以确保用户已完成文件夹的创建和重命名。鉴于无法保证用户将重命名文件夹,您最好应用启发式并等待一段时间,以查看是否发生重命名。或者发明一台时间机器,以便您知道用户将执行重命名操作。就文件系统而言,创建目录和随后的重命名操作是两个完全无关的事件。您不应该期望挂接到文件系统中的某些内容尝试关联them@CarlSixsmith-我想在JJS语言中,图像“Ordner”是“Folder”。@CarlSixsmith“Neuer Ordner”是德语。如果您想要新名称,然后还将侦听重命名事件,并仅触发代码延迟,以便您可以确保用户已完成文件夹的创建和重命名。鉴于无法保证用户将重命名文件夹,您最好应用启发式并等待一段时间,以查看是否发生重命名。或者发明一台时间机器,这样您就可以知道用户将执行重命名操作。