![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Pakshin A. S. |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Пишу прогу в Microsoft Visual C++ 6.0
Сначала выполняется вот эта функция:
Она записывает в файл структуру и добавляет ее в стек. Закрываю программу. Запускаю программу. Выполняется конструктор класса:
Он должен прочитать файл и добавить все структуры из него в стек. Так вот: файл читается два раза! Писал в него один раз, а получил содержание в нем как бы двух записей. Кстати, вторая читатся корректно, а именно она схожа с первой, т. е. файл как бы второй раз заново читается. В чем причина этого? Как избавиться от ошибки, не прибегая к просмотру стека для поиска повторений... |
||||
|
|||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
P. S.
Кстати по поводу сохранения в файл... вот тут оказывается что он все время перезаписывается (что есть логично), поэтому как при такой организации работы с файлом можно добавитсья запись в конец файла... Добавлено @ 11:03 С добавлением понял... Выяснилось, что два раза читается последняя запись в файле... |
|||
|
||||
| Pakshin A. S. |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Заработало корректно:
Интересно однако... я привык к вот такой логике:
а тут:
Это нормально? |
||||||
|
|||||||
| Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: 1 Всего: 4 |
да, ведь конец файла может наступить внутри цикла, до проверки условия
Это сообщение отредактировал(а) Exekutor - 22.4.2006, 11:30 -------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Pakshin A. S., состояние "конец файла" устанавливается только если программа пытается читать за его концом, не раньше. Т.е. первый вызов
input.read((char *) &buf, sizeof(SFileElement)); отрабатывает нормально, но не устанавливает eof, хотя дальше уже ничего нет. Когда ты вызываешь input.read второй раз - он уже ничего не читает, но и не перезаписывает твой буфер. Поэтому лучше проверять, сколько возвратил read: if (input.read((char *) &buf, sizeof(SFileElement))) ... -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |