Hello, уважаемый All.
Есть одна прога, которая правит файл.
Нужно из другой проги, отловить, что файл изменился и перечитать его.
Все время опрашивать нет желания.
Подскажите есть какой нибудь action.
Здравствуйте Geronimo, Вы писали:
G>Hello, уважаемый All. G>Есть одна прога, которая правит файл. G>Нужно из другой проги, отловить, что файл изменился и перечитать его. G>Все время опрашивать нет желания. G>Подскажите есть какой нибудь action.
См. FindFirstChangeNotification
"Будь достоин победы" (c) 8th Wizard's rule.
Re[2]: Реакция на изменение файла
От:
Аноним
Дата:
19.08.08 01:28
Оценка:
Здравствуйте, Lexey, Вы писали:
L>Здравствуйте Geronimo, Вы писали:
G>>Hello, уважаемый All. G>>Есть одна прога, которая правит файл. G>>Нужно из другой проги, отловить, что файл изменился и перечитать его. G>>Все время опрашивать нет желания. G>>Подскажите есть какой нибудь action.
L>См. FindFirstChangeNotification
Разве FindFirstChangeNotification работает для отдельного файла, помоему только для директории. Есть ли анолог для файла?
G>Есть одна прога, которая правит файл. G>Нужно из другой проги, отловить, что файл изменился и перечитать его. G>Все время опрашивать нет желания. G>Подскажите есть какой нибудь action.
Здравствуйте, x64, Вы писали:
А>>Разве FindFirstChangeNotification работает для отдельного файла, помоему только для директории. Есть ли анолог для файла?
x64>Если реально надо только и исключительно для одного файла, тогда только файловый фильтр (драйвер).
Здравствуйте, x64, Вы писали:
ЮЖ>>Исключительно для файла можно так:
x64>Фи, ради каких-то уведомлений целый COM поднимать! Не, пасиба, нинада, драйверок и то проще накатать.
Я просто другой способ показал.
Кстати, система shell notification и так всегда работает, нужно только подписаться
на уведомления, которые могут быть не только от объектов файловой системы. Можно
наблюдать за любыми объектами в shell namespace, включая "Корзину",Панель управления
и т.п. Так же можно ловить уведомления типа таких:
SHCNE_NETSHARE
A folder on the local computer is being shared via the network
SHCNE_SERVERDISCONNECT
The computer has disconnected from a server
SHCNE_DRIVEADD
A drive has been added.
Кроме того, есть следующая бесплатная возможность:
For performance reasons, multiple notifications may be combined into a
single notification. For example, if a large number of SHCNE_UPDATEITEM notifications
are generated for files in the same folder, they can be joined
into a single SHCNE_UPDATEDIR notification.
Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>Исключительно для файла можно так:
ЮЖ>
ЮЖ>... SHChangeNotifyRegister ...
ЮЖ>
Почему-то оповещения не всегда приходят — к примеру если файл сохраняется из notepad-а то приходит, а если из visual studio — то нет. И еще задержка между моментом сохранения и приходом оповещения какая-то уж слишком большая.
Здравствуйте, rusted, Вы писали:
R>Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>>А с такими флагами: SHCNRF_ShellLevel | SHCNRF_InterruptLevel ?
R>не помогло.
Как тут выяснилось, уведомления об изменении размера приходят только в том случае, если после изменения файла был сделан(прямо или косвенно) вызов SHChangeNotify (SHCNE_UPDATEITEM...). WriteFile сотоварищи этого естественно не делают. Кроме того, shell notification механизм для отслеживания действий над filesystem объектами использует FindFirstChangeNotification (и т.п функциях слежения за папками) и не транслирует изменения файлов в вызовы SHChangeNotify для них.
Так что этот метод плохо подходит для мониторинга файлов, здесь я ошибался. Можно следить за папками, в этом случае уведомления приходят.
Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>Как тут выяснилось, уведомления об изменении размера приходят только в том случае, если после изменения файла был сделан(прямо или косвенно) вызов SHChangeNotify (SHCNE_UPDATEITEM...). WriteFile сотоварищи этого естественно не делают. Кроме того, shell notification механизм для отслеживания действий над filesystem объектами использует FindFirstChangeNotification (и т.п функциях слежения за папками) и не транслирует изменения файлов в вызовы SHChangeNotify для них.
ЮЖ>Так что этот метод плохо подходит для мониторинга файлов, здесь я ошибался. Можно следить за папками, в этом случае уведомления приходят.