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



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

eg:

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

我尝试使用System.Thread.TimerTimespan,但是我不希望该应用等到读取第一个文件,然后处理第二个文件。我希望它可以不断处理其他消息并读取文件

任何帮助都很好

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中的条件复制它们。

最新更新