Как заставить систему оповещать приложение об изменении содержимого ко

Normann

Well-known member
09.08.2007
168
1
#1
... содержимого конкретного файла. Может быть вопрос и не правильный, но смысл в том что бы не обращаться к диску и не устраивать ручное сравнение содержимого в цикле.
 
Z

zubr

#2
Не понял, что значит не обращаться к диску (разве такое возможно?) и не устраивать ручное сравнение содержимого в цикле.
Данная задача решается примерно так:
1. По событию обращения к файлу или по таймеру читаем файл в буфер (если файл большой, то делим его на части).
2. Считаем контрольную сумму (есть много известных алгоритмов контрольной суммы) буфера или буферов (для большого файла).
3. Сравниваем контрольные суммы - правильную с полученной.
 
Z

zubr

#4
gamecreator
А что мешает при изменении файла программно оставить дату прежней?
 
P

Pasha

#5
Normann
Если система - винда, то можно мониторить папку через FindFirstChangeNotification или ReadDirectoryChangesW.
 
G

gamecreator

#6
gamecreator
А что мешает при изменении файла программно оставить дату прежней?
я не знаком именно с этим вопросом, но по-моему это уже умышленное действие (т.е. обычно проги такого не делают). или я не прав?
 

Normann

Well-known member
09.08.2007
168
1
#7
Если система - винда, то можно мониторить папку через FindFirstChangeNotification или ReadDirectoryChangesW
Дело в том что FindFirstChangeNotification "следит" за целым каталогом, а для моего контекста это не подходит, а с ReadDirectoryChangesW я еще не знаком т.к. мне моя среда пишет про нее типа undeclared identifer хотя все условия довлетворяют требованиям описаным в мсдне (WinDef.h Win2k pro). Поэтому скажите ReadDirectoryChangesW покажет мне имя измененного файла?
 

Normann

Well-known member
09.08.2007
168
1
#11
Определение _WIN32_WINNT >= 0x0400 я уже в код вставлял, все равно не поомгало, куда я его только не в ставлял, даже в сам WinBase.h. Но вот заработало оно только тогда когда я вставил это определение в свойства проэкта.