需要一种在c++中有效处理ReadDirectoryChangesW的方法
Need an efficient way to handle ReadDirectoryChangesW in C++
我想获得关于目录更改的通知(新文件添加/删除/更新)。我使用了一个API——"ReadDirectoryChangesW",它可以正确地通知目录中的任何更改。但是,API接受一个缓冲区,它在其中返回目录中添加/删除/修改文件的详细信息。这造成了一个限制,因为目录的更改是不确定的,有时可能很大。例如:1000个文件被添加到目录中。在这种情况下,我总是需要准备一个足够大的缓冲区来保存关于所有1000个文件的通知。
我不想总是创建这么大的缓冲区。有没有其他更有效的替代方法?
如果我正确阅读文档,它将返回尽可能多的更改适合您的缓冲区,然后当下次调用它将给您更多的更改。如果你想一次获得1000个文件的变化,你必须给它一个大的缓冲区,但如果你可以在更小的块中处理它们,只需传递一个较小的缓冲区,你将在后续调用中获得其余的变化。
您可以使用的一种方法是使用ReadDirectoryChangesW()作为通知目录中有一些更改的方法,然后将此通知作为事件来检查目录中的更改。
这个想法是发现你自己发生了什么变化,而不是依赖于ReadDirectoryChangesW()来告诉你发生了什么变化。
该函数的文档表明分配了一个系统缓冲区来跟踪更改,并且有可能,随着大量更改,分配的缓冲区将溢出。这将导致返回一个错误,并要求您发现自己更改了什么。
这篇关于使用ReadDirectoryChangesW()的文章可能会对您有所帮助。
在我的示例中,我使用该函数监视打印假脱机程序文件夹,其中可能会放入许多文本文件。文件的数量很少,所以我只分配了一个大的缓冲区。然后,我要做的是使用队列向实际的打印功能提供要打印的文件列表,该功能运行在另一个线程上。
- 如何有效地在OpenCV Mat和GpuMat上进行元素处理?
- c++ - 将大文件记录处理到 cpp 容器的最有效方法
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 如何有效地处理Teamcenter ITK C++代码中的错误
- boost::asio 使用 post() 时没有调用处理程序,当直接调用函数时有效(io_context有工作)
- 使用OOP有效地处理和读取轨迹文件
- 使用C 17处理Unicode的有效,符合标准的机制是什么
- 如何在处理传统C字符串的C样式函数中有效地使用std::string
- 从C++输入中收集数据时,是否有更有效的方法可以处理变量
- 如何有效地对多个精灵进行纹理处理
- 有效地处理 C/C++ 中的函数调用了一百万次
- 有效处理并发stl容器扩展的方法
- 以嵌套或递归方式(即在处理程序内)调用 asio io_service poll() 或 poll_one() 是否有效
- 处理客户端连接的最有效方法(套接字编程)
- 如何有效地运行后台处理和记录数据(Debian,Beaglebone Black)
- 如何正确处理信号,以便gperftools CPU分析器仍然有效
- 如何有效地处理不同的概率分布函数
- 有没有办法使用 clang 有效地编译已经预处理过的文件
- 需要一种在c++中有效处理ReadDirectoryChangesW的方法
- Qt : 有效处理QGraphics有"lots of pixmaps"的项目?(即时战略)