| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Повторное чтение файла |
| Автор: Pakshin A. S. 22.4.2006, 09:33 | ||||
| Пишу прогу в Microsoft Visual C++ 6.0 Сначала выполняется вот эта функция:
Она записывает в файл структуру и добавляет ее в стек. Закрываю программу. Запускаю программу. Выполняется конструктор класса:
Он должен прочитать файл и добавить все структуры из него в стек. Так вот: файл читается два раза! Писал в него один раз, а получил содержание в нем как бы двух записей. Кстати, вторая читатся корректно, а именно она схожа с первой, т. е. файл как бы второй раз заново читается. В чем причина этого? Как избавиться от ошибки, не прибегая к просмотру стека для поиска повторений... |
| Автор: Pakshin A. S. 22.4.2006, 10:58 |
| P. S. Кстати по поводу сохранения в файл... вот тут оказывается что он все время перезаписывается (что есть логично), поэтому как при такой организации работы с файлом можно добавитсья запись в конец файла... Добавлено @ 11:03 С добавлением понял... Выяснилось, что два раза читается последняя запись в файле... |
| Автор: Pakshin A. S. 22.4.2006, 11:24 | ||||||
Заработало корректно:
Интересно однако... я привык к вот такой логике:
а тут:
Это нормально? |
| Автор: Exekutor 22.4.2006, 11:28 |
| да, ведь конец файла может наступить внутри цикла, до проверки условия |
| Автор: Earnest 23.4.2006, 19:49 |
| Pakshin A. S., состояние "конец файла" устанавливается только если программа пытается читать за его концом, не раньше. Т.е. первый вызов input.read((char *) &buf, sizeof(SFileElement)); отрабатывает нормально, но не устанавливает eof, хотя дальше уже ничего нет. Когда ты вызываешь input.read второй раз - он уже ничего не читает, но и не перезаписывает твой буфер. Поэтому лучше проверять, сколько возвратил read: if (input.read((char *) &buf, sizeof(SFileElement))) ... |