Вы должны ловить FILE_NOTIFY_CHANGE_LAST_WRITE
, а не FILE_NOTIFY_CHANGE_SIZE
, для измененного файла.Файлы могут быть изменены без изменения размера.
Вы также должны сохранять очередь изменений и время, когда они произошли, и обрабатывать очередь только после того, как в течение последних 1-2 секунд не было никаких изменений.Некоторые приложения могут делать очень странные вещи при создании или изменении файлов, и вам, скорее всего, понадобится особый случай для популярных приложений, если вы планируете использовать этот код на свободе.
ReadDirectoryChanges
не одиниз самых дружественных функций Winapi.Вы, вероятно, не можете обойтись без получения двух событий при создании файла;Я не совсем уверен, получите ли вы дополнительную модификацию для FILE_NOTIFY_CHANGE_LAST_WRITE
при создании, но я думаю, что вы, вероятно, получите.Использование подхода очереди позволит вам легко выбросить дополнительное событие, если оно имеет ту же отметку времени, что и событие создания.