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