Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
278 / 250 / 209
Регистрация: 14.11.2016
Сообщений: 948
1

Считывание с двоичного файла

15.09.2017, 21:05. Показов 822. Ответов 2
Метки нет (Все метки)

Впервые работаю с двоичными файлами.
Почему программка "падает" при считывании?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
 
class Study final
{
public:
    typedef unsigned long long ull;
    typedef unsigned UINT;
    Study() : course(short()), group_code(UINT()), name("none"),
        num_book(ull()), discipline("none"), assessment(short()) {};
    Study(short _c, ull _g, std::string _na, UINT _nu, std::string _d, short _a)
        : course(_c), group_code(_g), name(_na), num_book(_nu), discipline(_d), assessment(_a) {};
    friend std::ostream& operator << (std::ostream &os, const Study &rhs)
    {
        return os << "Курс: " << rhs.course << std::endl
            << "Код группы: " << rhs.group_code << std::endl
            << "Фамилия: " << rhs.name << std::endl
            << "Номер зачетной книжки: " << rhs.num_book << std::endl
            << "Дисциплина: " << rhs.discipline << std::endl
            << "Оценка: " << rhs.assessment << std::endl;
    }
private:
    short course;
    unsigned group_code;
    std::string name;
    long long unsigned num_book;
    std::string discipline;
    short assessment;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Study study(1, 333, "Korolev", 12412, "Math", 5),
        study2;
    std::fstream file("output.txt", std::ios_base::in | std::ios_base::out
        | std::ios_base::binary | std::ios_base::trunc);
    file.seekg(0, std::ios_base::beg);
    file.write((char*)&study, sizeof(study));
    file.seekp(0, std::ios_base::beg);
    file.read((char*)&study2, sizeof(study2)); /* на этой строке программа падает */
    std::cout << study2 << std::endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2017, 21:05
Ответы с готовыми решениями:

Считывание с двоичного файла
Всем доброго времени суток. Записал с помощью программы (своей) в один файл два изображения, с...

Считывание из двоичного файла
Ребята, помогите пожалуйста! Из двоичного файла нужно считать числа, отвечающие определённым...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt;...

В начало двоичного файла целого типа дописать нечетные элементы этого файла.
Вот прога для записи четных файлов...в конец Мне нужно в начало....нечетные...помогите разобраться...

2
186 / 53 / 19
Регистрация: 23.12.2016
Сообщений: 162
15.09.2017, 21:44 2
Нельзя просто так взять и записать объект класса, тем более переменного размера. При считывании он просто не знает размер объекта, т.к. поле типа string например может иметь самый разный размер, от 0 и до бесконечности, и сколько байт он должен при это считать? И sizeof работает, насколько знаю, только со стандартными типами переменных.

В данном случае в классе следует реализовать методы write и read, которые будут аккуратно писать в файл поля данного класса и при необходимости их размеры, ну и считывать их в обратном порядке. Т.е. стандартные переменные типа int ты пишешь как обычно, а string - сначала пишешь размер переменной, потом её записываешь, ну и считываешь тоже сначала размер, а потом необходимое количество байт.
1
278 / 250 / 209
Регистрация: 14.11.2016
Сообщений: 948
16.09.2017, 10:19  [ТС] 3
altmax, всё же решил использовать фиксированный массив char
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2017, 10:19

Заменить считывание с клавиатуры на считывание из файла
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что...

Запись двоичного файла
Ребята, проясните, пожалуйста, ситуацию с двоичным выводом в файл. Конкретно двоичный, а не...

Раскодировка двоичного файла
Всем доброго времени суток. В общем у меня есть двоичный файл который содержит в себе сжатую...

Использование двоичного файла
Подскажите, пожалуйста, что такое двоичные файлы, и с чем их едят?) и как с помощью их можно...

Чтение из двоичного файла
Помогите пожалуйста. Проблема такая: В двоичном файле дан массив. нужно прочитать его и...

Создание двоичного файла на С++
Здравствуйте. Помогите в решении проблемы. На С++. Создать и заполнить двоичный файл. Слова в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.