![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Vaz007 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Добрый вечер. Есть проблема в записи в файл.
Сначала рабочий вариант: Groupa - класс состоящий из вектора указателей на студентов
В классе Student есть функция записи в файл (класс Student имеет данные имя , возраст)
Запись в файл происходит. А теперь код ,который мне нужен, не понимаю, почему не работает запись.
Помогите пожалуйста разобраться. |
||||||
|
|||||||
feodorv |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Хотя бы одно условие обязательно будет выполнено. Должно быть, имелось в виду
Добавлено через 4 минуты и 55 секунд А тут, наверное, так:
Добавлено через 8 минут и 19 секунд Вы бы выдали отладочную информацию:
А то вдруг до group.Write(in) дело не доходит... Добавлено через 10 минут и 56 секунд
А здесь нужны двойные слэши:
Добавлено через 12 минут и 55 секунд А ещё нужно проверять, что in и out были открыты без ошибок... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||||
|
|||||||||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Спасибо за замечания исправил.
Фото отладки сейчас выложу Добавлено через 28 секунд Фото1 Присоединённый файл ( Кол-во скачиваний: 11 ) ![]() |
|||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
||||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
Фото3
Запись не работает все равно. Это сообщение отредактировал(а) Vaz007 - 3.9.2013, 22:55 Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Проверь значение "age" и строчку
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Всё-таки продублируйте выдачу на экран:
В чём конкретно это выражается? Файла нет? Файл создаётся, но он пустой? Двойные слэши поправили? Это сообщение отредактировал(а) feodorv - 4.9.2013, 09:41 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
файл создается , но он пустой. слэши поправил
Это сообщение отредактировал(а) Vaz007 - 4.9.2013, 12:43 |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
flush сделай перед закрытием файла
и что у тебя там пишется в класс в этой строчке? ты для класса Sudent перегрузку оператора ">>" делал? Если нет, то всё что угодно может записаться. Например, name будет нормальным по значению, а вот age - непонятно что. Это сообщение отредактировал(а) akizelokro - 4.9.2013, 13:28 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
после flush заработал ))) только объясните почему??
|
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
На этом часто при изучении материала накалываются. Используется буфферизация ввода-вывода, при записи в файл нужно "сбросить" содержимое буфера записи на жёсткий диск в файл перед завершением работы. Почему это не делается автоматически, я тебе не скажу. Точнее, предположу, что в стандарте не предусмотрено автоматической записи из буфера в файл при закрытии файлового потока ввода-вывода. Это сообщение отредактировал(а) akizelokro - 4.9.2013, 20:06 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
Vaz007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 13.5.2009 Где: Москва Репутация: нет Всего: нет |
akizelokro, огромное спасибо))
|
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 2 Всего: 23 |
ну вообще-то стримы в деструкторах вызывают flush и close (не во всех реализациях явно, могут через свои буферы этто делать), так что скорее всего если смотреть сразу после прохождения строки в режиме трасировки, то файл мог не обновляться, но по выходу с области видимости стримового обьекта, он ДОЛЖЕН был записываться и обновляться
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Я текста программы не вижу. Я прочитал, что поток ввода открывается в функции и должен закрываться, предположу, в функции. Автоматически синхронизация буфера вывода осуществляется в 4 случаях: << endl; << flush; при заполнении буфера или при завершении программы. А вот происходит ли автоматическая синхронизация при закрытии потока не при завершении программы, вот этого я не знаю. Надо смотреть. Здесь случай достаточно нестандартный. Пишут не '\n', а std::endl в подавляющем большинстве случаев и также в подавляющем большинстве случаев рассматриваются программы для начинающих в консольном режиме, где потоки открываются в main и с ним же закрываются. Добавлено через 10 минут и 50 секунд Щас глянул полседнюю прогу. Оказалось, что я у себя везде flush'у перед close. Но я не особо лихой программист. Правда, у меня и проблем что чего-то не записалось, не бывает никахда. ![]() Это сообщение отредактировал(а) akizelokro - 5.9.2013, 14:43 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |