我想收到有关目录更改的通知(新文件添加/删除/更新)。
我使用了一个API-“ReadDirectoryChangesW”,它可以正确通知目录中的任何更改。但是,API接受一个缓冲区,在该缓冲区中它返回在目录中添加/删除/修改的文件的详细信息。
这是一个限制,因为目录的更改不确定,有时可能很大。例如:在目录中添加了1000个文件。
在这种情况下,我alwasys需要准备好足够大的缓冲区以容纳有关所有1000个文件的通知。
我不想总是创建这个大缓冲区。
还有其他更有效的替代方法吗?
最佳答案
可以使用的一种方法是使用ReadDirectoryChangesW()作为通知目录已发生某些更改的方法,然后将该通知用作事件来查看目录的更改。
这个想法是发现自己发生了什么变化,而不是依靠ReadDirectoryChangesW()告诉您发生了什么变化。
documentation for the function指示已分配系统缓冲区来跟踪更改,并且可能发生大量更改,分配的缓冲区将溢出。这将导致返回错误,并且需要您自己发现发生了什么变化。
这个article on using ReadDirectoryChangesW()可能对您有帮助。
就我而言,我正在使用该功能监视可能会放入许多文本文件的后台打印程序文件夹。文件的数量很小,所以我刚刚分配了一个大缓冲区。然后,我要做的是使用队列提供实际的打印功能,该功能在另一个线程上运行,即要打印的文件列表。