Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
#1

Запись в файл некоторого количества структур - C++

18.04.2013, 23:18. Просмотров 355. Ответов 8
Метки нет (Все метки)

Надо записать в файл некоторое количество записей, не используя массивов.
Знаю что надо через write(), но вот как правильно передать параметры ..
Есть структура
C++
1
2
3
4
5
6
struct examen 
{
    char group[80];
    char date[50];
    char subject[100];
}timelable;
В цикле записываются структуры..

Добавлено через 15 минут
А кажется так))
C++
1
out.write((char*)&timelable,sizeof(timelable));
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
18.04.2013, 23:24     Запись в файл некоторого количества структур #2
C++
1
out << timelable.group << endl << timelable.date << endl << timelable.subject << endl;
Если fstream. Или надо сразу целую структуру?
stima
432 / 287 / 16
Регистрация: 22.03.2011
Сообщений: 936
Завершенные тесты: 1
18.04.2013, 23:26     Запись в файл некоторого количества структур #3
Цитата Сообщение от knf Посмотреть сообщение
А кажется так))
Код C++
1
out.write((char*)&timelable,sizeof(timelable));
Нет не так, подумайте дольше над строками. Подсказка выведите sizeof(timelable) и посмотрите чему он равен.
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
18.04.2013, 23:36  [ТС]     Запись в файл некоторого количества структур #4
stima,
C++
1
cout<<sizeof(timelable)
==230

Добавлено через 1 минуту
C++
1
out.write((char*)&timelable,sizeof(timelable));
Вообще, так записалось, но по какой-то причине при чтении из файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int print(char filename[80])
{   examen ex;
    ifstream in(filename);
    if(!in.is_open())
    {
        cout<<"Такого файла не существует";
        return 1;
 
    }
    while(!in.eof())
    {
        in.read((char*)&timelable,sizeof(timelable));
        cout<<"Группа";
        cout<<timelable.group<<endl;
 
        cout<<"Дата";
        cout<<timelable.date<<endl;
 
        cout<<"Предмет";
        cout<<timelable.subject<<endl;
 
 
    }
 
return 0;
}
Выводит два раза. Почему-то не достигается конец файла...
stima
432 / 287 / 16
Регистрация: 22.03.2011
Сообщений: 936
Завершенные тесты: 1
18.04.2013, 23:46     Запись в файл некоторого количества структур #5
По поводу sizeof() забейте, вечер, поздно голова думала о другом.
По повод eof() в случае чтения побайтно пишите так
C++
1
for ( ; in.read((char*)&timelable,sizeof(timelable)); )
Почему? Кратко EOF это тоже байт)
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
18.04.2013, 23:50  [ТС]     Запись в файл некоторого количества структур #6
stima, А можно подробнее про последнее?) Если не сегодня, то завтра) просто все тут придется объяснять
stima
432 / 287 / 16
Регистрация: 22.03.2011
Сообщений: 936
Завершенные тесты: 1
19.04.2013, 01:10     Запись в файл некоторого количества структур #7
Попытаюсь обьяснить. По поводу того почему мы 2 раза итерируемся.
1. Вы считали успешно впритык. eof нету.
2. Вы попросили читать еще раз. Данных для считывания нет. eof есть.

По поводу одинаковых данных. Вы просто не перезатерли предидущие данные. Обьявите переменную локально, и проинициализируйте ее поля Вашей меткой. Так вот во второй раз выведется метка.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
19.04.2013, 02:54     Запись в файл некоторого количества структур #8
Есть 2 пути:
1) извращаться с бинарным считыванием, write, sizeof, все такое
2) записать как если бы это был вывод на экран, только направить в файл

Можно перегрузить для вашей структуры оператор <<
C++
1
2
3
4
5
std::ostream & operator<< (std::ostream &out, const examen &e)
{
    out << e.group << std::endl << e.date << std::endl << e.subject << std::endl;
    return out;
}
и выводить данный структурный тип данных как если бы это был POD тип.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2013, 17:13     Запись в файл некоторого количества структур
Еще ссылки по теме:

C++ Запись структур в файл
Запись структур в файл C++
Запись и чтение в файл массива структур в которую вложен вектор C++
Запись массива структур в бинарный файл C++
Запись в файл определенного количества элементов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
19.04.2013, 17:13  [ТС]     Запись в файл некоторого количества структур #9
У нас требуется
Цитата Сообщение от MrGluck Посмотреть сообщение
извращаться
Yandex
Объявления
19.04.2013, 17:13     Запись в файл некоторого количества структур
Ответ Создать тему
Опции темы

Текущее время: 11:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru