Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание файла только когда он изменился. Как организовать? Функции и структуры. 
:(
    Опции темы
malor
  Дата 2.8.2011, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Допустим мне нужно много раз в секунду считывать содержимое txt-файла. В нем записан один байт. В зависимости от его значения будут предприниматься какие-то действия программой. 
Файл создается, пишется, удаляется другой программой. 

Алгоритм:
1) Проверить существует ли сам файл.
2) Проверить изменился ли он путем сравнения с запомненным в переменной prevTime значением времени.
3) Если изменился, то произвести открытие файла функцией CreateFile(), а затем считывание функцией ReadFile().

Какие функции и структуры использовать на 1-м и 2-м шагах? Желательно без статического подключения каких-либо lib.
3-й шаг не вызывает нареканий? 

MSVS 2008
PM MAIL   Вверх
Earnest
Дата 2.8.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



1-2) FindFirstFile

Вызывает нарекание сам факт обмена через текстовый файл, да еще и длиной 1 байт...


--------------------
...
PM   Вверх
bass
Дата 2.8.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



1) Проверить существует ли сам файл.

Так Начнем с нуля........
Впринцепи наличие файла можно проверить с помощью FindFirstFile и тому подобные...... 
Но если мы знаем путь , почему не воспользоваться CreateFile , с флагом открыть существующий. Вернет -1 (INVALID_HANDLE_VALUE).файла нет либо занят другой программой.....

2)файл открылся.... Как нам проверить изменился он или нет*??? Надо наверно считать... Read file и сравниваем с переменной....



Поставь в цикл и проверяй.... Не забудь слиип поставит а то 100% загрузки проца....

По поводу второго пункта еще есть функции контроля файла на изменение но щас на память не скажу, посоветую гугл....
PM MAIL   Вверх
bass
Дата 2.8.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Цитата(Earnest @ 2.8.2011,  15:21)
1-2) FindFirstFile

Вызывает нарекание сам факт обмена через текстовый файл, да еще и длиной 1 байт...

Да да сам обмен через файл точно вызывает нарекания.....
Может внутрений сокет или пайп почтовый ящик или просто память...????

FindFirstFile а это как второму пункту?????  Если нужно проверить изменения в нутри....


Это сообщение отредактировал(а) bass - 2.8.2011, 15:47
PM MAIL   Вверх
Earnest
Дата 2.8.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



FIndFirstFile, т.к. одновременно можно проверить и существование и время - см. функцию и ее параметры.


--------------------
...
PM   Вверх
asmdzen
Дата 2.8.2011, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 1
Всего: 5



Цитата(malor @  2.8.2011,  14:38 Найти цитируемый пост)
Файл создается, пишется, удаляется другой программой.

разве то что файл может быть открыт в то время когда та самая программа захочет его удалить не критично?
можно как-то открыть файл чтоб другие процессы могли его свободно удалить, а мы при попытке чтения получали бы ошибку?
PM MAIL   Вверх
bass
Дата 3.8.2011, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Просто у тебя какае то Особенная задача...... Я бы выкрчивался так если время не критично выполнению, морозилбы другой процес На время чтения....... Если тот процесс написан не нами а выполнят функцию логирования и т.д. 
Если время критично перехватом функций WriteFile DeleteFile Crete file......
Правдо это для новичка сложновато... 
А когда файл открыт функцией cretefile ты не удалишь его......
И может ситуация быть что наш процес не успеет считать данные.... При первом варианте...... Скорость обновления файла....
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.