| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с записью в файл |
| Автор: Vaz007 3.9.2013, 19:35 | ||||||
| Добрый вечер. Есть проблема в записи в файл. Сначала рабочий вариант: Groupa - класс состоящий из вектора указателей на студентов
В классе Student есть функция записи в файл (класс Student имеет данные имя , возраст)
Запись в файл происходит. А теперь код ,который мне нужен, не понимаю, почему не работает запись.
Помогите пожалуйста разобраться. |
| Автор: Vaz007 3.9.2013, 22:34 |
| Спасибо за замечания исправил. Фото отладки сейчас выложу Добавлено через 28 секунд Фото1 |
| Автор: Vaz007 3.9.2013, 22:35 |
| Фото2 |
| Автор: Vaz007 3.9.2013, 22:35 |
| Фото3 Запись не работает все равно. |
| Автор: akizelokro 4.9.2013, 01:25 | ||
Проверь значение "age" и строчку
|
| Автор: feodorv 4.9.2013, 09:41 | ||
Всё-таки продублируйте выдачу на экран:
В чём конкретно это выражается? Файла нет? Файл создаётся, но он пустой? Двойные слэши поправили? |
| Автор: Vaz007 4.9.2013, 12:43 |
| файл создается , но он пустой. слэши поправил |
| Автор: akizelokro 4.9.2013, 13:24 |
| flush сделай перед закрытием файла и что у тебя там пишется в класс в этой строчке? ты для класса Sudent перегрузку оператора ">>" делал? Если нет, то всё что угодно может записаться. Например, name будет нормальным по значению, а вот age - непонятно что. |
| Автор: Vaz007 4.9.2013, 18:21 |
| после flush заработал ))) только объясните почему?? |
| Автор: akizelokro 4.9.2013, 19:57 |
На этом часто при изучении материала накалываются. Используется буфферизация ввода-вывода, при записи в файл нужно "сбросить" содержимое буфера записи на жёсткий диск в файл перед завершением работы. Почему это не делается автоматически, я тебе не скажу. Точнее, предположу, что в стандарте не предусмотрено автоматической записи из буфера в файл при закрытии файлового потока ввода-вывода. |
| Автор: Vaz007 4.9.2013, 21:06 |
| akizelokro, огромное спасибо)) |
| Автор: SenkraD 5.9.2013, 11:02 |
| ну вообще-то стримы в деструкторах вызывают flush и close (не во всех реализациях явно, могут через свои буферы этто делать), так что скорее всего если смотреть сразу после прохождения строки в режиме трасировки, то файл мог не обновляться, но по выходу с области видимости стримового обьекта, он ДОЛЖЕН был записываться и обновляться |
| Автор: xvr 5.9.2013, 13:45 |
Подозреваю, что программе нормально завершиться не дают. Например она слетает по исключению или ее банально прибивают по Ctrl-C |
| Автор: akizelokro 5.9.2013, 14:38 | ||
Я текста программы не вижу. Я прочитал, что поток ввода открывается в функции и должен закрываться, предположу, в функции. Автоматически синхронизация буфера вывода осуществляется в 4 случаях: << endl; << flush; при заполнении буфера или при завершении программы. А вот происходит ли автоматическая синхронизация при закрытии потока не при завершении программы, вот этого я не знаю. Надо смотреть. Здесь случай достаточно нестандартный. Пишут не '\n', а std::endl в подавляющем большинстве случаев и также в подавляющем большинстве случаев рассматриваются программы для начинающих в консольном режиме, где потоки открываются в main и с ним же закрываются. Добавлено через 10 минут и 50 секунд Щас глянул полседнюю прогу. Оказалось, что я у себя везде flush'у перед close. Но я не особо лихой программист. Правда, у меня и проблем что чего-то не записалось, не бывает никахда. |