![]() |
|
Модераторы: bsa |
![]()
|
|
| Adry |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 13.4.2011 Репутация: нет Всего: нет |
Есть такая задача (уточню: под Винду)
Имеется софтинка, которая работает с нашей аппаратурой, собирает информацию, пишет в два файла. Аппаратура может непрерывно работать несколько суток подряд, информация идет непрерывно, обращения к фалам происходят примерно раз в секунду. Иногда возникает необходимость просмотреть уже собранную информацию. Банально скопировать уже собранные данные на флешку, например. Сейчас я, чтобы это сделать, руками из программы останавливаю сбор информации вообще, благо 5-10 секунд задержки большой роли не сыграют: данные сохраняются в буфере той самой аппаратуры, а вычитываю я их быстрее, чем они туда падают. Если запись не остановить, естественно, программа обращается к файлу, видит, что он используется уже кем-то другим, выдает ошибку и закрывается. Конечно, можно зациклить программу, чтобы она останавливала сбор информации автоматически. Но, может быть, есть какие-то другие варианты? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Изменять программу можно ?
при копировании ? ссылку на видео, пожалуйста -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Adry |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 13.4.2011 Репутация: нет Всего: нет |
Исесьно. Подходит дядечка-астрофизик с флешкой, открывает Тотал или Експлорер и пытается скопировать себе на флешку то, что детекторы насобирали. Тут от мене ничего не зависит: надо ставить "защиту от дурака" Нет, не астрофизики с флешками раз в секунду бегают.... Показания с детекторов сбрасываются раз в секунду.... Изменять программу можно и нужно... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Пусть твоя программа раз минуту делает копии файлов в другом каталоге, пусть астрофизики их оттуда забирают, а в оригинальный каталог их не пускай
Для создания копии к оригиналу можно не обращаться, а запоминать изменения в ОЗУ и раз в минуту их дописывать (надеюсь, ОЗУ хватит для хранения 1 минуты данных). |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
1. Как вариант - записывать данные во временный файл (убрать его с глаз, например куда-нибудь в Temp) и каждую минуту закрывать его, переносить в боевой каталог с новым именем, и создавать этот временный заново 2. Вообще-то, копирование файла не захватывает его, и писать в него в это время можно. Покажи код создания файла и записи в него. посмотри внимательно, что я процитировал перед фразой "ссылку на видео, пожалуйста" Добавлено через 1 минуту и 7 секунд P.S. По поводу одной минуты мы с math64 не сговаривались - писАли одновременно -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Можно и так: подходит астрофизик к компу, вставляет флешку, твоя программа видит, что появилась флешка, копирует данные на флешку, отмонтироует флешку ("безопасное извлечение") и говорит забирай.
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
А может просто убрать запрет совместного доступа на чтение с файла?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
А программа, которая снимает данные досовская? Тогда винда увидит изменения в файле только после его закрытия, и никакого совместного доступа быть не может.
|
|||
|
||||
| Adry |
|
||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 13.4.2011 Репутация: нет Всего: нет |
"Вот, я не понял, шо ты имела в виду" (с).... Я маленькая, глупая. Не догоняю, что здесь не так, кроме пропущенной в слове "файлам" буквы "й".... :((( Фал: 1) Трос, веревка, канат для подъема парусов, сигнальных флагов и т.п. 2) Страховочный трос у летчиков, космонавтов и т.п. Не?
Да! Это то, что нужно!
Тут все на уровне начальной школы Создание файла и разрешение записи
Собственно, запись
Добавлено через 2 минуты и 28 секунд А как? |
||||||||||
|
|||||||||||
| borisbn |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
nevermind По делу: 1. В документации по ф-ции fopen сказано
А ты этого не делаешь. Плёхо! 2. Попробуй открывать с параметром "a+b" 3. fputc записывает в файл один символ. Это - медленно. Лучше сделать так: вместо
а вместо
будет быстрее -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||||
|
|||||||||||
| Adry |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 13.4.2011 Репутация: нет Всего: нет |
Плёхо, конечно. Просто не смогла придумать, что делать, если fopen(n_tm,"ab")==NULL. Если continue или break - терять пакет. Если пытаться его открывать до упора, есть вероятность уйти в бесконечный цикл. Выбрасывать мессадж - не всегда оператор сидит рядом с установкой, а пока нет реакции на мессадж, программа простаивает. Оставила по принципу "я подумаю об этом завтра". Воот. А теперь этот корябус вылез...:(( По остальным пунктам - завтра на работе перерисую. Спасибо!!! |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
если уж на то пошло, более вероятна ошибка записи из-за отсутствия свободного места на диске.
Проверить на возможность открытия файла на (до)запись можно только после задания имени файла - потом он скорее всего так откроется (если не находится на флешке) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Вместо fopen/fread/fwrite/fclose использовать соответственно CreateFile/ReadFile/WriteFile/CloseHandle. Или аналог из MFC. Я так понял, именно он и используется в проекте. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |