问题在于:我使用Win32 API ReadDirectoryChangesW函数监控目录。我需要区分新创建的文件和修改过的文件。但是有问题......一如既往:(
例:
FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_SIZE
)。 问题:文件创建后,会触发新文件事件+修改文件事件。但我只需要一个。我怎么能避免这种情况?当文件被修改时,我得到了我想要的东西:)。FILE_NOTIFY_CHANGE_FILE_NAME
) - 没有问题。FILE_NOTIFY_CHANGE_SIZE
)。 问题:当新文件出现时,将触发修改操作以及文件创建事件。我怎么能避免这种情况?当然,我实施了一些解决方法。但是,我想知道是否有任何优雅的方法来处理我所描述的问题。
提前致谢!
答案 0 :(得分:4)
对于修改后的文件,您应该抓住FILE_NOTIFY_CHANGE_LAST_WRITE
,而不是FILE_NOTIFY_CHANGE_SIZE
。可以在不改变大小的情况下修改文件。
您还应该保留更改队列及其发生的时间,并且仅在过去1-2秒内没有更改后处理队列。有些应用程序在创建或修改文件时可能会做一些非常奇怪的事情,如果你打算在野外使用这些代码,你很可能想要使用流行应用程序的特殊情况。
ReadDirectoryChanges
不是最友好的winapi功能之一。你可能无法绕过文件创建接收两个事件;我不完全确定你是否会在创作时获得FILE_NOTIFY_CHANGE_LAST_WRITE
的额外修改,但我想你可能会这样做。如果与创建事件具有相同的时间戳,则使用队列方法将允许您轻松地抛出额外事件。