我希望收到有关目录更改的通知(新文件添加/删除/更新)。 我使用了一个API - “ReadDirectoryChangesW”,它可以正确地通知目录中的任何更改。但是,API接受一个缓冲区,在该缓冲区中它返回目录中添加/删除/修改的文件的详细信息。 这构成了一个限制,因为目录中的更改不确定,有时可能很大。例如:在目录中添加1000个文件。 在这种情况下,我需要准备好一个足够大的缓冲区来保存所有1000个文件的通知。
我不想总是创建这个大缓冲区。 还有其他更有效的替代方法吗?
答案 0 :(得分:3)
如果我正确阅读了文档,它将返回适合您缓冲区的更改,然后在接下来调用它时将为您提供更多更改。如果想一次获得1000个文件的变化,你必须给它一个很大的缓冲区,但如果你能用较小的块来处理它们,只需传入一个较小的缓冲区,你就可以得到其余的后续电话的变化。
答案 1 :(得分:2)
您可以使用的一种方法是使用ReadDirectoryChangesW()作为通知目录中存在某些更改的方式,然后将此通知用作查看目录以进行更改的事件。
我们的想法是发现自己改变了什么而不是依赖于ReadDirectoryChangesW()来告诉你改变了什么。
documentation for the function表示系统缓冲区被分配用于跟踪更改,并且可能会有大量更改,分配的缓冲区将溢出。这会导致返回错误,并且需要您发现自己已经发生了哪些变化。
此article on using ReadDirectoryChangesW()可能会对您有所帮助。
就我而言,我正在使用该函数来监视一个打印假脱机程序文件夹,其中可能会丢弃许多文本文件。文件数量很少所以我刚刚分配了一个大缓冲区。然后我做的是使用一个队列来提供实际的打印功能,该功能在另一个线程上运行,即要打印的文件列表。