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”是德语。如果您想要新名称,然后还将侦听重命名事件,并仅触发代码延迟,以便您可以确保用户已完成文件夹的创建和重命名。鉴于无法保证用户将重命名文件夹,您最好应用启发式并等待一段时间,以查看是否发生重命名。或者发明一台时间机器,这样您就可以知道用户将执行重命名操作。