Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > чтение структуры из файла |
Автор: шарлотта 12.10.2017, 23:23 | ||
Здравствуйте! Возникает ошибка при чтении структуры из файла и при дозаписи в файл.
Буду очень благодарна за помощь! |
Автор: baldman88 13.10.2017, 07:56 |
Дык, что Вы записываете то? Просто адрес структуры (&buf). Если хотите записывать структуры в файл, то почитайте про сериализацию/десериализацию. Можно написать (для несложных стуктур, как в Вашем случае) методы, которые будут записывать (построчно, в одну строку через разделитель или как-либо еще) значения каждого поля структуры, и метод, который потом это все будет читать и присваивать новой структуре. Но советую все же использовать сериализацию/десериализацию. |
Автор: xvr 13.10.2017, 12:13 |
Через write/read можно писать/читать только POD структуры, т.е. состоящие из простых С типов и других таких структур. Ваша Payment содержит поле типа std::string, который использует динамическую память. Вы можете сохранить сам класс в файл, но та память, на которую он ссылался никуда не сохраняется, а при чтении не восстанавливается. Отсюда и последующие ошибки |
Автор: шарлотта 13.10.2017, 13:00 |
Большое спасибо! |
Автор: шарлотта 13.10.2017, 20:51 |
Требуется преобразовать данные бинарного файла в текстовый файл в виде ведомости с графой общих итогов. 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)? Заранее большое спасибо! |
Автор: шарлотта 14.10.2017, 20:40 |
Спасибо за помощь, удалось разобраться! |