![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: нет Всего: 38 |
Есть программа, которая постоянно пишет в файл данные вида:
Данные добавляются в конец файла. Необходимо каким-то образом получать в режиме реального времени (или близком к нему) эти данные в виде записи, состоящей из 2-х переменных типа Integer. Какое оптимальное решение? Проблемы: 1. Как получить актуальную версию файла? (Возможно сторонняя программа использует эксулюзивный доступ при записи). 2. Необходимо избежать перечитывания всего файла. Было бы замечательно попользовать построчный seek() для текстового файла, но, к сожаленю такого нет... -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
зачем через файл? есть более адаптированные под данные задачи средства
-------------------- There are always someone smarter than you... |
|||
|
||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: нет Всего: 38 |
MetalFan,
К сожалению, подлезть к сторонней программе по-другому не выходит. -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| VladBD |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 19.11.2006 Репутация: 1 Всего: 5 |
Программа 1
Считывает файл как бинарный в DBF, по-моему можно начинать с любого места - должны быть функции по-любому... Программа 2 Лезет в DBF и с определенной записи считывает данные. Когда считала, пометила где остановилась и в следующий раз считывает уже с другого RECNO |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Это самый идиотский случай. Тут можно только выкручиваться. Я бы даже не брался за такой проект при таких условиях. Может она еще сразу стирать данные будет за собой, а другая прога будет восстанавливать? Уточните момент с эксклюзивным доступом, иначе это будет не работа, чесание правой ногой левого уха. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: нет Всего: 38 |
VladBD,
Получается постоянная перезапись DBF? Не то же ли самое, что и прямое чтение бинарного файла? Alexeis, С эксклюзивным доступом уточню немного позже. Надеюсь, что если программа его ставит, то только в момент записи. Как-то же работают анализаторы логов которые пишутся исключительно в конец текстового файла построчно... не думаю, что каждый раз перечитывается многомегабайтный файл. Это сообщение отредактировал(а) SamDark - 7.2.2007, 10:14 -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
Может по таймеру смотреть размер файла .Например изначально он 12000 байт , затем увидели что он на 2000 байт больше .
Seek(12000...);Read(...2000...)/ в качестве буффера для Read использовать динамический массив , который потом анализировать . Открывать файл можно с помощью конструкции:
Это сообщение отредактировал(а) SlaUr - 8.2.2007, 10:46 |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: нет Всего: 124 |
||||
|
||||
| Alexeyt |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 15.9.2006 Где: около Москвы Репутация: нет Всего: 2 |
Решение может быть такое:
1. поставить тред, следящий за изменением файла Есть для этого компоненты на Torry.net. 2. При изменении да, перечитывать весь файл. Или - только с того места, с которого кончили читать в прошлый раз. |
|||
|
||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: нет Всего: 38 |
Реализовал алгоритм, который привёл SlaUr:
Висит поток, который постоянно проверяет размер файла и если он стал больше - считывает ровно столько байт, на сколько увеличился файл. Всё работает на ура, но возникла проблема: если совпадают моменты записи файла с моментом анализа этого же файла потоком (пока сделали reset(f), но ещё не закрыли файл) - записать в файл ничего сторонней программе не удаётся. При этом с ней творятся всякие неприятности... Вопрос: как избежать такого эффекта? -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |