Страница: 1 | 2 | 3 |
Вопрос: Реагировать на запись в файл
Добавлено: 19.01.06 16:41
Автор вопроса: Max
Народ, подскажите пожалуйста.
Имеется текстовый файл, в который время от времени кто-то что-то пишет.
Как из программы можно узнать, что в файл что-то записали не проверяя его раз в какое-то время, а именно в тот момент, когда совершена запись?
Заранее спасибо
Ответы
Всего ответов: 37
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 19.01.06 16:45
проверять его раз в какое-то время. можно проверять про времени файла, например, можно по crc-сумме..
Номер ответа: 2
Автор ответа:
Max
Вопросов: 12
Ответов: 17
Профиль | | #2
Добавлено: 19.01.06 16:50
как проверять я знаю...
но мне не совсем подходит ждать долго после записи.
долго - это больше нескольких секунд.
Номер ответа: 3
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #3
Добавлено: 19.01.06 16:56
Долго - проверяй раз меньше чем в секунду.. делай проверку на API'шном таймере. Чтобы не такой таймер не тормозил тебе процесс, можешь проверку вынести в отдельный поток. Но и этой проблемы вроде нет, если таймер на API.
Номер ответа: 4
Автор ответа:
GeorgeGA
Вопросов: 1
Ответов: 101
Профиль | | #4
Добавлено: 19.01.06 16:58
сразу не соображу,но вот деревянный метод
ставь таймер на постоянную проверку файла, но в процедуру допиши doevents,чтоб тачку не вешать
Номер ответа: 5
Автор ответа:
Max
Вопросов: 12
Ответов: 17
Профиль | | #5
Добавлено: 19.01.06 17:00
Да, жти методы мне более-менее известны
я думал может через сообщения Виндов что-то можно сделать
Номер ответа: 6
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #6
Добавлено: 19.01.06 17:08
Перехватывать те API, что пишут в файл, причём именно в этот.. Задача не самая простая.
Если это расшаренный файл в сети, приложение работает с файлом только одно - твоё. Если так, используй сетку для быстрых сообщений (между экземплярами твоего приложения) о том, что файл поменялся.
Номер ответа: 7
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #7
Добавлено: 19.01.06 17:13
Задачу как у тебя решают обычно разработчики СУБД, они создают для этого сервер баз данных и всем желающим надо подключатья не к файлам самим, а к серверу. Опять же, если только твоё приложение работает с этими данными, пусть оно подключается к твоему "Серверу".
Номер ответа: 8
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #8
Добавлено: 19.01.06 17:14
А что ты пишешь, просто интересно?
Номер ответа: 9
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #9
Добавлено: 19.01.06 17:27
Может просто проверять размер в цикле, и выдавать сообщение при
изменении размера
Номер ответа: 10
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #10
Добавлено: 20.01.06 11:23
Рут, не выйдет. Пока цикл идет, ты ничего сделать не сможешь.
Мне как-то пришлось столкнуться с проблемой, что пока идет цикл, упраление на таймер на форме не переходит. Пришлось апи-ф-ю использовать.
Номер ответа: 11
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #11
Добавлено: 20.01.06 11:38
всмысле, цикл идет, размер изменился выйти из цикла и выдать
сообщение, потом опять в цикл
Номер ответа: 12
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #12
Добавлено: 20.01.06 11:43
Кстати у меня пример есть, запускаешь 2 версии одной проги и если в
одной происходят изменения, то вторая фиксирует в реальном времени!
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 20.01.06 11:51
В цикле можно воткнуть DoEvents
А проверять лучше всего не длину файла, а дату изменения.
Номер ответа: 14
Автор ответа:
Max
Вопросов: 12
Ответов: 17
Профиль | | #14
Добавлено: 22.01.06 12:20
mc-black
грубо говоря, программа, которая собирает информацию с некого устройства, которое читает информацию с магнитной полосы и записывает это в файл.
Так уж получилось (независимо от меня), что я не могу делать это напрямую из моей программы.
Т.к. это связпно с работой с людьми, то после проведения "карточки" в устройстве должно пройти минимальное время...
Номер ответа: 15
Автор ответа:
Max
Вопросов: 12
Ответов: 17
Профиль | | #15
Добавлено: 22.01.06 12:22
Если кому интересно - мне подкинули информацию про вариант для .NET - пользоваться классом FileSystemWatcher (Ожидает уведомления файловой системы об изменениях и инициирует события при изменениях папки или файла в папке.)
)