Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Обработка ошибки записи в файл

Ответить
Настройки темы
C/C++ - Обработка ошибки записи в файл

Аватара для Apock

Пользователь


Сообщения: 75
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: Apock
Дата: 20-04-2019
Чувствую, что решение банально простое, но что-то интернет мне не дал ответа.
Есть прога, которая сохраняет лог в текстовый файл несколько раз в секунду. И есть моя прога, которая этот лог читает. Дабы не обрабатывать старые строки повторно, сделал следующую процедуру:
Прочитал->очистил файл->через время прочитал снова.
Проблема в том, что иногда совпадает момент записи в файл и моей очистки, что вызывает ошибку моей программы.
Задача в том, чтоб этой ошибки избежать и просто повторить попытку записи.
Пытался так. Не помогает. Хотя мне кажется, что ошибка стала выскакивать реже.
Код: Выделить весь код
List->Clear();  //Очищаем список
refi:                //метка
try
{
List->SaveToFile(file);
}
catch(...)
{
goto refi;
}

-------
Говорят, что производители чипсетов не стоят на месте. Чушь. Как стоял завод корпорации 3dfx на перекрёстке 7-й авеню и 6-й дежавю, так и стоит.


Отправлено: 11:12, 20-04-2019

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Apock:
Дабы не обрабатывать старые строки повторно »
а зачем его каждый раз читать с начала? - просто ждите появления в нём новых данных

Цитата Apock:
очистил файл »
просто удаляйте его или переименовывайте

Отправлено: 12:22, 20-04-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Apock

Пользователь


Сообщения: 75
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Busla:
а зачем его каждый раз читать с начала? - просто ждите появления в нём новых данных »
Реализация сложнее. Как считать информацию из файла начиная с N-строки я не знаю(хотя какой-нибудь метод потокового чтения решил бы много проблем). Тем более со временем этот лог-файл разрастётся до размера слона и обрабатывать его будет всё сложнее. Мой метод проще - удалил всё и знаю, что при след.обращении все данные можно считать новыми.
Цитата Busla:
удаляйте его или переименовывайте »
Пробовал удаление. Ошибка при перекрёстной записи также выскакивает.

-------
Говорят, что производители чипсетов не стоят на месте. Чушь. Как стоял завод корпорации 3dfx на перекрёстке 7-й авеню и 6-й дежавю, так и стоит.


Отправлено: 13:10, 20-04-2019 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Apock:
Дабы не обрабатывать старые строки повторно, сделал следующую процедуру:
Прочитал->очистил файл->через время прочитал снова.
Проблема в том, что иногда совпадает момент записи в файл и моей очистки, что вызывает ошибку моей программы. »
Не делайте так. Проблема именно в этом.

Цитата Apock:
Как считать информацию из файла начиная с N-строки я не знаю(хотя какой-нибудь метод потокового чтения решил бы много проблем). »
Не существует таких способов в принципе. Чтобы найти N-ную строку, нужно прочитать все предыдущие. Именно поэтому с начала времён такие файлы и именуются файлами последовательного доступа.

Очищать файл должно генерирующее его приложение — по времени, по размеру, або тупо периодически. Если такового функционала нет — Вы можете попробовать:
Цитата Busla:
или переименовывайте »
если генерирующее приложение не «держит» log-файл постоянно открытым. Ваше приложение должно открывать данный файл для чтения в совместном доступе, читать имеющиеся данные, запоминать номер последней прочитанной строки и закрывать файл. При следующем обращении к файлу Вы должны последовательно прочитать/пропустить строки от начала до сохранённого номера последней ранее прочитанной строки.

Отправлено: 17:13, 20-04-2019 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Iska:
Не существует таких способов в принципе. Чтобы найти N-ную строку, нужно прочитать все предыдущие. »
ха-ха-ха
нужно просто запомнить текущую позицию - в принципе все файлы - двоичные

Цитата Iska:
если генерирующее приложение не «держит» log-файл постоянно открытым. »
однозначно же написано, что не держит:
Цитата Apock:
иногда совпадает момент записи в файл и моей очистки, что вызывает ошибку моей программы »
Цитата Iska:
або »
нет такого слова (в русском языке)


Цитата Apock:
Ошибка при перекрёстной записи также выскакивает. »
ну так она в приложении читателе - нужно просто повторить операции

Цитата Apock:
какой-нибудь метод потокового чтения решил бы много проблем »
обычно Си/С++ и начинают изучать с потокового чтения и записи - stdio, iostream ;-)

Отправлено: 22:44, 20-04-2019 | #5

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата Busla:
нет такого слова (в русском языке) »
Цитата Dahl (Ru-Ru) (к версии ABBYY Lingvo x5)
Толковый словарь живого великорусского языка в 4-х томах. 2-е издание. В.И. Даль. 1880-1882 гг. более 200 тыс. слов
:
або АБО, альбо союз ряз., кур., вор. ли, либо, или. Або добыть, або домой (домовь, дома) не быть, зап.; || аль, разве, нежто. Або то, або это, либо. Або ты не слышишь? Або-ще, вот еще, что еще, как бы не так; будто? Або-що, что-нибудь; || хотя и. Дай або-що, что-нибудь. Або-що батька, да хуже свекра, хотя. Або-как, как-нибудь, как попало.

-------
Mikhail Zhilin


Отправлено: 22:54, 20-04-2019 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Busla:
ха-ха-ха
нужно просто запомнить текущую позицию - в принципе все файлы - двоичные »
Перечитайте, пожалуйста, на что я отвечал.

Цитата Busla:
нет такого слова (в русском языке) »
В Вашем русском языке, может быть, и нет. В моём — есть.


Цитата Busla:
нужно просто повторить операции »
…и потерять непрочитанные записи.

Отправлено: 23:15, 20-04-2019 | #7


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


mwz, ok - в современном русском языке

Iska, и зачем же вы так категорично отвечаете на выдернутые из контекста фразы?

Цитата Iska:
нужно просто повторить операции »
…и потерять непрочитанные записи. »
Множественное число не наводит на мысли, что речь не про единственную операциЮ удаления?

Отправлено: 23:44, 20-04-2019 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Обработка ошибки записи в файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Обработка ошибки открытия daniil_im Скриптовые языки администрирования Windows 9 14-01-2019 07:38
PowerShell - [решено] Обработка текстовых файлов и вывод всех значение в один файл Snap_Naprolom Скриптовые языки администрирования Windows 2 24-03-2016 15:44
Предварительная обработка .flv-файлов в VirtualDub-e для записи на DVD. DJ Mogarych Видео и аудио: обработка и кодирование 18 29-05-2011 02:47
ошибки при проверке записи данных и анализе треков algusev Оптические приводы 4 19-01-2011 20:09
Nero выдаёт ошибки при записи fufgjd Хочу все знать 13 01-11-2009 19:59




 
Переход