С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 43

Считывание из бинарного файла и занисение в список

13.05.2011, 00:10. Показов 1864. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. Столкнулся с проблемой считывания из бинарного файла. Только вот не с самим считыванием, а занесением информации в мой список походу считывания. У меня есть список состоящий из четырех полей, позже в функции void main я для удобства объединил их в одну переменную INFO d. Функции считывания и записи написать не составило труда т.к. с этим заданием я сталкивался много раз. Но я считывал матрицы или текст, а вот со списком я не встречался и как организовать занесение считаной информации в список понятия не имею. Посмотрите пожалуйста код.

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
const int N=100;
 
struct INFO
{
    int ISBN;
    int year;
    char avtor[N];
    char name[N];
};
 
struct BOOK 
{
    INFO data;
    BOOK *next;
};
 
void Initial(BOOK *&head)
{
    head = new BOOK;
    head->next=NULL;
}
// Вот функция записи, которая тоже работает хорошо
int WriteF(BOOK *head)
{
    char sFileName[20];
    BOOK *tmp=head->next;
    cout << "Введите имя файла:";
    cin >> sFileName;
    FILE *f=fopen(sFileName, "wb");
    while(tmp!=0)
    {
        fwrite (&tmp->data , sizeof(BOOK), 1 , f );
        tmp=tmp->next;
    }
    fclose(f);
    return 0;
}
// А вот тут функция считывание и занесение в мой список, но как я не пытался ничего оно не заносит...
int ReadF(INFO d, BOOK *head, BOOK *end)
{
    char sFileName[20];
    cout << "Введите имя файла:";
    cin >> sFileName;
    FILE *f=fopen(sFileName, "rb");
    while(!feof(f))
    {
        fread(&head->data,sizeof(BOOK),1,f);
        // Тут должно быть занесение в список
    }
    fclose(f);
    return 0;
}
void main()
{
        BOOK *head=NULL, *end=NULL;
        INFO d;
        Initial(head);
        // Тут еще пропущена функция заполнения с клавиатуры, но это не важно т.к. она работает
        WriteF(head);
        ReadF(d, head, end);
}
Добавлено через 1 час 42 минуты
Вопрос не решен!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2011, 00:10
Ответы с готовыми решениями:

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

Считывание бинарного файла
Здравствуйте! Изначально нужно было прочитать почисленно текстовый файл и забить его в массив. Но т.к. это не получилось, решил прочитать...

Считывание из бинарного файла
СЧИТАТЬ ИЗ БИНАРНОГО ФАЙЛА ВСЕ ВЕЩЕСТВЕННЫЕ ЧИСЛА В МАССИВ И ВЫВЕСТИ ЕГО НА ЭКРАН. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

5
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
13.05.2011, 00:23
Записывать нужно не всю структуру BOOK, а только поле data. Считывать соответственно также.
0
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 43
14.05.2011, 09:15  [ТС]
Цитата Сообщение от Perfaratar Посмотреть сообщение
fwrite (&tmp->data , sizeof(BOOK), 1 , f );
Как видно от сюда я записываю &tmp-data, а sizeof(BOOK) это размер моего типа данных.
0
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 09:39
C++
1
2
        char avtor[N];
        char name[N];
То есть вы записываете в файл указатели, а потом удивляетесь, что после считывания указателей по ним ничего нет?
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
14.05.2011, 09:43
Цитата Сообщение от Perfaratar Посмотреть сообщение
Как видно от сюда я записываю &tmp-data, а sizeof(BOOK) это размер моего типа данных.
Размер tmp->data будет равен sizeof(INFO), если что

Jtalk,
C
1
2
char avtor[N];
char name[N];
статические массивы.
0
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 43
15.05.2011, 22:23  [ТС]
Ладненько, у меня прогресс, смотрите что вышло. Считывает из файла только последнюю строчку, но не все. Ткните пальцем где не так.

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
const int N=100;
 
struct INFO
{
        int ISBN;
        int year;
        char avtor[N];
        char name[N];
};
 
struct BOOK 
{
        INFO data;
        BOOK *next;
};
 
void Initial(BOOK *&head)
{
        head = new BOOK;
        head->next=NULL;
}
// Вот функция записи, которая тоже работает хорошо
int WriteF(BOOK *head)
{
        char sFileName[20];
        BOOK *tmp=head->next;
        cout << "Введите имя файла:";
        cin >> sFileName;
        FILE *f=fopen(sFileName, "wb");
        while(tmp!=0)
        {
                fwrite (&tmp->data , sizeof(BOOK), 1 , f );
                tmp=tmp->next;
        }
        fclose(f);
        return 0;
}
int Add(INFO d, BOOK *&head, BOOK *&end)
{
    if(head==NULL)
    {
        end = head= new BOOK;
        head->next=NULL;
        head->data=d;
        return 1;
    }
    else
    {
        end->next=new BOOK;
        head->next->data=d;
        head->next->next=NULL;
        return 1;
    }
    
 
    return 0;
}
int ReadF(INFO d, BOOK *head, BOOK *end)
{
        char sFileName[20];
        cout << "Введите имя файла:";
        cin >> sFileName;
        FILE *f=fopen(sFileName, "rb");
        while(!feof(f))
        {
                fread(&head->data,sizeof(BOOK),1,f);
                Add(d,head,Prev);
        }
        fclose(f);
        return 0;
}
void main()
{
        BOOK *head=NULL, *end=NULL;
        INFO d;
        Initial(head);
        // Тут еще пропущена функция заполнения с клавиатуры, но это не важно т.к. она работает
        WriteF(head);
        ReadF(d, head, end);
}
Добавлено через 3 часа 20 минут
Ап блин!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2011, 22:23
Помогаю со студенческими работами здесь

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

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

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

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

Считывание строки из бинарного файла в string
Привет всем!! Помогите новичку понять почему происходит ошибка при считывании строки из файла. void LoadFile() { string j; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru