0

我正在使用文件监视程序来监视文件夹中包含 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 等到复制/文件夹创建完成,然后再采取行动,而不使用线程。如何做到这一点?

4

2 回答 2

1

您可以创建一个计时器,在循环中等待您的条件(写入 6 个文件),如果该条件尚未满足,则休眠一小段时间......

于 2013-11-13T06:32:19.240 回答
1

如果您阅读文档,当在定义的文件夹中创建、更改或删除文件时,将触发 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则可以通过在写入日志之前检查创建文件的扩展名来轻松添加它。

于 2013-11-13T06:39:45.097 回答