如何在 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++ 中监视目录中的文件?的主要内容,如果未能解决你的问题,请参考以下文章