文件监视器等待完整文件夹复制而不使用线程

时间:2013-11-13 06:19:47

标签: c# file file-io directory wait

使用文件观察程序监视文件夹中是否有新的传入文件夹,其中包含6个csv文件。但是,在完全复制新文件夹之前,文件观察者创建了事件。

wacher_created方法中的代码是: -

manifest_watcher.Created += new FileSystemEventHandler(manifest_watcher_Created);
manifest_watcher.EnableRaisingEvents = true;

public void manifest_watcher_Created(object sender, FileSystemEventArgs e)
{
    foreach (string file in Directory.GetFiles(e.FullPath, "*.csv"))
    {
        FileInfo subFileInfo = new FileInfo(file);
        logs.writeLog("FileInfo" + subFileInfo.FullName+"Name:"+subFileInfo.Name);
    }
}

虽然传入的文件夹上面有6个文件,只有2个文件写入日志,但是其余部分都没有被注意到。我想让wacher等到复制/文件夹创建完成之后才采取行动,而不使用线程。如何做到这一点?

2 个答案:

答案 0 :(得分:1)

你可以创建一个计时器,在一个循环中等待你的条件(写入6个文件),如果没有满足这个条件,你可以睡一小段时间......

答案 1 :(得分:1)

如果您阅读documentation OnCreated事件将在定义的文件夹中创建,更改或删除文件时被触发,e.FullPath将返回已更改文件的完整路径。 /> 这意味着对于在文件夹中创建,更改或删除的每个文件,都会触发事件。
您的代码应该略有不同,您无需等待所有文件都写入目标文件夹

    public void manifest_watcher_Created(object sender, FileSystemEventArgs e)
    {
        WatcherChangeTypes wct = e.ChangeType;
        if (wct == WatcherChangeTypes.Created)
        {               
            logs.writeLog("FileInfo" + e.FullPath + "Name:" + e.Name);
        }
    }

如果要为CSV file添加过滤器,则可以在编写日志之前通过检查已创建文件的扩展名来轻松添加过滤器。