如何根据收到的消息连续轮询文件位置

时间:2018-04-05 02:28:26

标签: c#

我的应用程序从另一个系统接收消息,指示文件已在文件夹中发布,然后检查文件夹以将该文件复制到另一个位置。这很好用,但是在应用收到消息后20分钟,文件会在文件夹中发布。我想了解如何在不停止每个文件轮询的情况下创建延迟的一些帮助/想法。

例如:

  • 上午10:00:收到消息20180405_file1.pdf已创建
  • 10:02 am:收到消息20180405_file2.pdf已创建
  • 上午10:20:检查20180405_file1.pdf的文件夹
  • 上午10:22:检查20180405_ file2.pdf
  • 的文件夹

我尝试使用System.Thread.TimerTimespan,但我不希望应用等到读取第一个文件然后处理第二个文件。我希望它能够持续处理其他消息并阅读文件

任何帮助都会很棒

1 个答案:

答案 0 :(得分:1)

<强> MSDN:

  

FileSystemWatcher侦听文件系统更改通知和   当目录或目录中的文件发生更改时,引发事件。

查看msdn了解更多详情。

您需要什么:

FileSystemWatcher fileWatcher;

private void watch()
{
    fileWatcher = new FileSystemWatcher();
    fileWatcher.Path = path;
    fileWatcher.Created += new FileSystemEventHandler(OnCreated);
    fileWatcher.EnableRaisingEvents = true;
}

private void OnCreated(object source, FileSystemEventArgs e)
{
    WaitForFile(e.FullPath);

    //Copy files to another directory.
}

private void WaitForFile(string fullPath)
{
    while (true)
    {
        try
        {
            using (StreamReader stream = new StreamReader(fullPath))
            {
                break;
            }
        }
        catch
        {
            Thread.Sleep(1000);
        }
    }
}
创建文件后,

OnCreated会命中,但要等到写入文件。不需要任何计时器,因为FileSystemWatcher将监视新文件的创建。

您可以使用此功能,只有在您收到消息后,所有pdf文件都生成一个特定文件夹。如果它是一个公共文件夹,其中还有其他文件,则需要管理与消息通知相同的pdf文件列表,然后根据OnCreated中的条件复制它们。