如何在 C++ 中监视目录中的文件?

Posted

技术标签:

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

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

【问题讨论】:

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

要获取目录内容更改时的回调,请使用ReadDirectoryChangesW 和FindFirstChangeNotification 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文件都被删除。

【讨论】:

以上是关于如何在 C++ 中监视目录中的文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的程序监视 C++ 中的文件修改?

如何在 Mac OS X 上监视目录中的更改?

如何在 Linux 中监视完整的目录树的更改?

如何在 C++ 中获取目录中的文件列表? [复制]

寻找一种在 Unix C++ 中被动监视目录中文件活动的方法

排除在TypeScript中监视目录