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

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

Восстановить пароль Регистрация
 
knf
16 / 16 / 2
Регистрация: 18.09.2012
Сообщений: 184
18.04.2013, 23:18     Запись в файл некоторого количества структур #1
Надо записать в файл некоторое количество записей, не используя массивов.
Знаю что надо через 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));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 23:18     Запись в файл некоторого количества структур
Посмотрите здесь:

Считывание и запись структур в бинарный файл C++
C++ Запись структур в файл
Запись в файл структур(с указателем) C++
C++ запись массива структур в файл
Запись/чтение массива структур в бинарный файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 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
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 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
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
19.04.2013, 01:10     Запись в файл некоторого количества структур #7
Попытаюсь обьяснить. По поводу того почему мы 2 раза итерируемся.
1. Вы считали успешно впритык. eof нету.
2. Вы попросили читать еще раз. Данных для считывания нет. eof есть.

По поводу одинаковых данных. Вы просто не перезатерли предидущие данные. Обьявите переменную локально, и проинициализируйте ее поля Вашей меткой. Так вот во второй раз выведется метка.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
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++
Fwrite и freed, запись массива структур в файл C++
C++ Запись массива структур в бинарный файл

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

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

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