有一个软件,每12秒向一个目录下的某个文件做WriteFile操作,先在一个偏移位置WriteFile一个递增的时间戳,再在之后的偏移位置WriteFile其它内容,最后调用 FlushFileBuffer ,这样一分钟写5次。用process monitor监控后,如下图所示:
红框部分是写递增的时间戳操作
我的任务是监控这个软件对这个目录下的这个文件的每一次更新,然后解析文件内容,发送出去。
我用的API是 ReadDirectoryChangesW()结合完成例程,来监控这个目录下的这个文件,若这个目录下的文件更新就响应完成例程(回调函数),
具体使用的方法,参考了很多例子,应该问题不大,同时回调函数响应的次数也是一分钟五次,这个也没问题,也就是说文件的变化,都监控到了
那个软件每次在文件的一个位置写入递增的时间戳,正常应该是
...
第N次文件变化响应,然后读文件,读到的其中的时间戳是 20180503143009
第N+1次文件变化响应,然后读文件,读到的时间戳是 20180503143021
...
但总出现
...
第N次文件变化响应,然后读文件,读到的其中的时间戳是 20180503143009
第N+1次文件变化响应,然后读文件,读到的时间戳是 20180503143009
...
或者
...
第N次文件变化响应,然后读文件,读到的其中的时间戳是 20180503143021
第N+1次文件变化响应,然后读文件,读到的时间戳是 20180503143021
...
也就是说,每监控到一次文件改变后,我去读这个文件内容中的的时间戳部分,时间戳应该是递增的。按理说,监控到文件改变后,之前的写操作应该都flush到磁盘了,不应该出现上述情况。
我怀疑是不是 这个ReadDirectoryChangesW()的机制,顶多是只能通知到文件的变化,但并不保证,在收到回调通知后,内容是否彻底被FlushFileBuffer到了磁盘。
请问 大家对这块有好的建议吗?