【问题标题】:How to monitor a directory for files in C++?如何在 C++ 中监视目录中的文件?
【发布时间】:2010-03-24 17:43:33
【问题描述】:

我需要监视一个包含许多文件的目录,并且一个进程从目录中读取和删除 .txt 文件;一旦所有的 .txt 文件都被消费完,消费进程就需要被杀死。如何检查是否所有 .txt 文件都使用 C++ 使用? 我正在 Windows 平台上的 Visual Studio 上开发我的应用程序。

【问题讨论】:

  • “消费”是什么意思?您无法检测到正在读取文件的进程。
  • Consumed 表示已处理并删除。
  • 当没有更多文件可供消费时,为什么消费进程不退出?
  • 消费进程等待更多文件并且永不退出。为了测试消费过程,一些文件存储在目录中,一旦被消费就需要停止。

标签: c++ visual-c++


【解决方案1】:

要获取目录内容更改时的回调,请使用ReadDirectoryChangesWFindFirstChangeNotification Win32 API。

您可以从this question 中查看示例。

【讨论】:

    【解决方案2】:

    使用FindFirstChangeNotification注册通知回调。

    【讨论】:

      【解决方案3】:

      由于不需要对每个 txt 文件删除执行操作。我想出了以下代码:

      {
        intptr_t hFile;
        struct _finddata_t c_file;
        string searchSpec;
        for (size_t i = 0; i < dataPathVec.size(); ++i)
        {
          searchSpec = dataPathVec.at(i) + DIRECTORY_SEPERATOR + "*" + TXT_FILE_EXT;
          hFile = 0;
          while((hFile != -1L) || (ret != 0))
          {
              hFile = _findfirst(searchSpec.c_str(), &c_file);
              Sleep(500);
              if (hFile != -1L)
              {
                  ret = _findclose(hFile);
              }
          }
        }
      }
      

      它可以监控多个文件夹,并等到所有被监控文件夹中的所有txt文件都被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-29
        • 2013-08-31
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多