Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Трогают ли файл? 
:(
    Опции темы
szz
Дата 6.12.2007, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

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



У меня две программы обзаются, но дурацким способом - через расшаренную папку.

Программа А пишет вэту папку текстовые файлы иногда, а программа Б проверяет, есть ли в этой папке файлы, и если есть - то читает их, в них комманды, которые она должна выполнить.

Программа Б проверяет папку раз в 10 секунд, когда она выполняет все команды из конкретного файла - то удаляет этот файл.

Проблема в том, что иногда Б начитает читать тот файл, который еще не дописан программой А!
Читает, видит там пол команды написаны, и криво обрабатывает, потом еще и пытается удалить файл, который первая прога еще не дописала даже.

Вот если бы Б могла видеть, не закончили ли еще писать файл с той стороны? Т.е. открыт ли где-нибудь дескриптор указывающий на этот файл? И если да, то не трогать файл, до следующей попытки.


--------------------
PM   Вверх
JackYF
Дата 6.12.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



szz, если не использование межпроцессное общение, то пусть программа А после окончания работы с файлом 1 создаёт вспомогательный пустой файл 1а. По нему программа Б и определит, что файл 1 готов к работе.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Earnest
Дата 6.12.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Есть флаги разделения доступа. В зависимости от OC (посмотри доки). Например, если Windows, это будут флаги FILE_SHARE_READ \ WRITE. Устанавливаются (или нет) при открытии файла. Если используется какая-то библиотека, то она может собственную интерпретацию давать. Например, MFC::CFile определяет флаги с противоположным значением: shareDenyRead и т.д. (не разрешающие, а запрещающие), но суть от этого не меняется.


--------------------
...
PM   Вверх
SergeCpp
Дата 6.12.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

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



Вот программа CRC32, работающая через общий файл

Прикрепил файл с программой для Multi-Edit, которая работает совместно с CRC32
(смотрите в конце файла)

Пишите в общий файл некий флаг (первый символ, например), говорящий о том, что файл готов

1. Начинаете создавать файл, флаг = 0
2. Создаёте файл, флаг не меняется
3. Файл готов, записываете флаг = 1


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  MISC.RAR 11,70 Kb
PM MAIL WWW ICQ   Вверх
Lazin
Дата 6.12.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Можно еще создать именованый мютекс, с именем, производным от имени файла, при открытии файла, перед тем как записать что-то в файл - захватывать мютекс, а потом освобождать.
PM MAIL Skype GTalk   Вверх
bsa
Дата 6.12.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



А можно еще проще. Программа Б ищет только файлы с определенным расширением и только их обрабатывает. Программа А создает файлы с другим расширением и пишет в них, как только файл полностью записан, он закрывается и его расширение меняется на правильное путем переименования. Имхо, это реализуется гораздо проще.
PM   Вверх
szz
Дата 6.12.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

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



Всем спасибо ) нану наверное с самого простого решения - от bsa


--------------------
PM   Вверх
nanoo
Дата 6.12.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а что, нельзя разве это через сокеты сделать? нафига 10 раз в секунду дергаться, если можна один сокет создать и будет он сидеть и ждать. как только данные пришли, он тут же их и обрабатывает. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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