|
Модераторы: bsa |
|
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
Здравствуйте!
Возникает ошибка при чтении структуры из файла и при дозаписи в файл.
Буду очень благодарна за помощь! Это сообщение отредактировал(а) шарлотта - 13.10.2017, 00:57 |
|||
|
||||
baldman88 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 210 Регистрация: 18.1.2009 Репутация: 1 Всего: 7 |
Дык, что Вы записываете то? Просто адрес структуры (&buf). Если хотите записывать структуры в файл, то почитайте про сериализацию/десериализацию. Можно написать (для несложных стуктур, как в Вашем случае) методы, которые будут записывать (построчно, в одну строку через разделитель или как-либо еще) значения каждого поля структуры, и метод, который потом это все будет читать и присваивать новой структуре. Но советую все же использовать сериализацию/десериализацию.
|
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Через write/read можно писать/читать только POD структуры, т.е. состоящие из простых С типов и других таких структур. Ваша Payment содержит поле типа std::string, который использует динамическую память. Вы можете сохранить сам класс в файл, но та память, на которую он ссылался никуда не сохраняется, а при чтении не восстанавливается. Отсюда и последующие ошибки
|
|||
|
||||
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
Большое спасибо!
Это сообщение отредактировал(а) шарлотта - 13.10.2017, 13:03 |
|||
|
||||
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
Требуется преобразовать данные бинарного файла в текстовый файл в виде ведомости с графой общих итогов.
void Payment::Translate(const char *str) { std::fstream file(str, std::ios::in | std::ios::binary); if (!file) { std::cerr << "cannot open file " << str << std::endl; } else { Payment buf; std::vector<Payment> vect; while (file.read((char*)&buf, sizeof buf)) { vect.push_back(buf); } std::fstream file2("pay1.txt", std::ios::in); if (!file2) { std::cerr << "cannot open file " << "pay1.txt" << std::endl; } else { std::ostream_iterator<Payment> writer(file2, "\n"); std::copy(vect.begin(), vect.end(), writer); } } } Выводит просто в столбик. Возможно ли вывести данные в виде ведомости с графой общих итогов? И возможно ли реализовать эту функцию не с помощью вектора, а с помощью отображения(map)? Заранее большое спасибо! Это сообщение отредактировал(а) шарлотта - 13.10.2017, 22:57 |
|||
|
||||
шарлотта |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 55 Регистрация: 1.3.2017 Репутация: нет Всего: нет |
Спасибо за помощь, удалось разобраться!
|
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |