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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Normann, 9 мар 2008.

  1. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    ... содержимого конкретного файла. Может быть вопрос и не правильный, но смысл в том что бы не обращаться к диску и не устраивать ручное сравнение содержимого в цикле.
     
  2. zubr

    zubr Гость

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

    gamecreator Гость

    а если прочитать дату изменения?
     
  4. zubr

    zubr Гость

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

    Pasha Гость

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

    gamecreator Гость

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

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Дело в том что FindFirstChangeNotification "следит" за целым каталогом, а для моего контекста это не подходит, а с ReadDirectoryChangesW я еще не знаком т.к. мне моя среда пишет про нее типа undeclared identifer хотя все условия довлетворяют требованиям описаным в мсдне (WinDef.h Win2k pro). Поэтому скажите ReadDirectoryChangesW покажет мне имя измененного файла?
     
  8. Pasha

    Pasha Гость

    Покажет имя и action.
     
  9. Igorg

    Igorg Гость

    Может, надо определить _WIN32_WINNT >= 0x0400 перед включением <windows.h>? Этот макрос по умолчанию не определен...
     
  10. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
  11. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Определение _WIN32_WINNT >= 0x0400 я уже в код вставлял, все равно не поомгало, куда я его только не в ставлял, даже в сам WinBase.h. Но вот заработало оно только тогда когда я вставил это определение в свойства проэкта.
     
Загрузка...

Поделиться этой страницей