Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
1 / 1 / 2
Регистрация: 03.12.2015
Сообщений: 25

Записать и считать информацию из бинарного файла

22.05.2016, 20:12. Показов 3670. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты.
Дано задание:
Написать программу,которая создает в каталоге 2 файла - текстовый и бинарный,и записать в каждый из них по 6 строк,после чего прочитать из них информацию и отобразить ее на консоли.
Каждая из строк должна иметь целочисленное поле(порядковый номер строки),и символьное поле с текстом "tel." и номером телефона в формате 380ХХХХХХХХХ.
В чем собственно проблема:
Текстовый файл создает,записывает информацию,считывает информацию и выводит на консоль.
А вот с бинарными файлами бьюсь уже 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
47
48
49
50
51
52
53
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
 
#define N 80
 
int finction(char, char, int);
 
FILE *pTextFile;
FILE *pBinFile;
 
int main() 
{
    pTextFile = fopen("D:\\TextFileW.txt", "w+");
    pBinFile = fopen("D:\\BinFileW.bin", "w+");
    char *cString = ". tel. 380990870108";
    char cNewLine = '\n';
    int j = 1;
    if (pTextFile == NULL)
    {
        puts("Problems");
        return EXIT_FAILURE;
    }
    for (int x = 1; x <= 7; x+=1)
    {
        fwrite(&cString, sizeof(int), 1, pBinFile);
        fprintf(pTextFile, "%d%s%c", j, cString, cNewLine);
        j++;
    }
    
    fclose(pTextFile);
    fclose(pBinFile);
 
    int F = function();
    _getch();
    return 0;
}
 
int function()
{
    char arr[N];
    
    pTextFile = fopen("D:\\TextFileW.txt", "r");
    
    while (fgets (arr, N, pTextFile)!=NULL)
    printf("%s", arr);
    printf("\n");
    
    fclose(pTextFile);
    
    return -1;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2016, 20:12
Ответы с готовыми решениями:

Задание по Visual c++ 2013, Нужно создать файл, записать в него информацию, а затем по другой кнопке считать информацию из файла
Вот код записи в файл: { UpdateData(TRUE); F.open(L&quot;dat1.txt&quot;, std::ios::out); // F - файловая переменная p.god = p_god; //...

Считать из файла информацию и записать её в односвязный линейный список
Как считать из файла информацию и записать её в односвязный линейный список?

Из первого файла считать информацию, обработать, а результат записать во второй
Не могу написать программу. Нужно из первого файла считать информацию, обработать, а результат показать во втором файле. Дана програма: ...

6
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.05.2016, 22:00
Лучший ответ Сообщение было отмечено Zordaxo как решение

Решение

Режим.
C++
1
pBinFile = fopen("D:\\BinFileW.bin", "wb+");
Там уже указатель. И где длина?
C++
1
2
3
4
fwrite(reinterpret_cast<char *>(&j), sizeof(int), 1, pBinFile);
int l = strlen(cString);
fwrite(reinterpret_cast<char *>(&l), sizeof(int), 1, pBinFile);
fwrite(cString, l, 1, pBinFile);
Считывание в обратном порядке.
1
1 / 1 / 2
Регистрация: 03.12.2015
Сообщений: 25
22.05.2016, 23:15  [ТС]
Спасибо за совет,запись сделать получилось,работает правильно,но не могу понять как сделать чтение из бинарного и вывод на консоль
Вот код:
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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
 
#define N 80
 
int function(char, char, int);
 
FILE *pTextFile;
FILE *pBinFile;
 
int main() 
{
    pTextFile = fopen("D:\\TextFileW.txt", "w+");
    pBinFile = fopen("D:\\BinFileW.bin", "wb+");
    char *cString = ". tel. 380990870108";
    char cNewLine = '\n';
    int j = 1;
    if (pTextFile == NULL)
    {
        puts("Problems");
        return EXIT_FAILURE;
    }
    for (int x = 1; x <= 6; x+=1)
    {
        fwrite(&j, sizeof(int), 1, pBinFile);
        int l = strlen(cString);
        fwrite(&l, sizeof(int), 1, pBinFile);
        fwrite(cString, l, 1, pBinFile); 
        fprintf(pTextFile, "%d%s%c", j, cString, cNewLine);
        j++;
    }
    
    fclose(pTextFile);
    fclose(pBinFile);
 
    int F = function(cString, cNewLine, j);
    _getch();
    return 0;
}
 
int function(char cString, char cNewLine, int j)
{
    char arr[N];
    
    pBinFile = fopen("D:\\BinFileW.bin", "rb");
    pTextFile = fopen("D:\\TextFileW.txt", "r");
    
    while (fgets (arr, N, pTextFile)!=NULL)
    printf("%s", arr);
    printf("\n");
    
    
    fclose(pTextFile);
    return -1;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
23.05.2016, 14:46
Лучший ответ Сообщение было отмечено Zordaxo как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int function(char cString, char cNewLine, int j)
{
    char arr[N];
    int j, l;
    
    pBinFile = fopen("D:\\BinFileW.bin", "rb");
    
    while (fread(reinterpret_cast<char *>(&j), sizeof(int), 1, pBinFile) > 0)
    {
        fread(reinterpret_cast<char *>(&l), sizeof(int), 1, pBinFile);
        fread(arr, l, 1, pBinFile);
        arr[l] = '\0';
        printf("%d %s\n", j, arr);
    }
    
    fclose(pBinFile);
    return -1;
}
1
1 / 1 / 2
Регистрация: 03.12.2015
Сообщений: 25
23.05.2016, 20:02  [ТС]
Может быть я где то туплю,не могу понять,при запуске консоль прекращает работу(Прекращена работа программы "Lab2.exe"),компилируется все нормально без ошибок(Dev-C).
Вот код:
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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
 
#define N 80
 
int function(char, char, int);
 
FILE *pTextFile;
FILE *pBinFile;
 
int main() 
{
    pTextFile = fopen("D:\\TextFileW.txt", "w+");
    pBinFile = fopen("D:\\BinFileW.bin", "wb+");
    char *cString = ". tel. 380990870108";
    char cNewLine = '\n';
    int j = 1;
    if (pTextFile == NULL)
    {
        puts("Problems");
        return EXIT_FAILURE;
    }
    for (int x = 1; x <= 6; x+=1)
    {
        fwrite(&j, sizeof(int), 1, pBinFile);
        int l = strlen(cString);
        fwrite(&l, sizeof(int), 1, pBinFile);
        fwrite(cString, l, 1, pBinFile); 
        fprintf(pTextFile, "%d%s%c", j, cString, cNewLine);
        j++;
    }
    
    fclose(pTextFile);
    fclose(pBinFile);
 
    int F = function(cString, cNewLine, j);
    _getch();
    return 0;
}
 
int function(char cString, char cNewLine, int j)
{
    char arr[N];
    int l;
    
    pBinFile = fopen("D:\\BinFileW.bin", "rb");
    pTextFile = fopen("D:\\TextFileW.txt", "r");
    
    while (fgets (arr, N, pTextFile)!=NULL)
    printf("%s", arr);
    printf("\n");
    
    while (fread(&j, sizeof(int), 1, pBinFile) > 0);
    {
        fread(&l, sizeof(int), 1, pBinFile);
        fread(arr, l, 1, pBinFile);
        arr[l] = '\0';
        printf("%d %s\n", j, arr);
    }
    
    fclose(pTextFile);
    fclose(pBinFile);
    return -1;
}
Добавлено через 4 часа 39 минут
nmcf, Очень и очень благодарю вас за советы,с выше описанной проблемой разобрался путем добавления вспомогательной функции,а в ней уже и делал чтение из бинарного,вот код готовый,может кому пригодится:
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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
 
#define N 200
#define M 150
 
int function(char, char, int);
int fBinFile(char, char, int);
 
FILE *pTextFile;
FILE *pBinFile;
 
int main() 
{
    char array[M];
    pTextFile = fopen("D:\\TextFileW.txt", "w+");
    pBinFile = fopen("D:\\BinFileW.bin", "wb+");
    char *cString = ". tel. 380990870108";
    char cNewLine = '\n';
    int j = 1;
    if (pTextFile == NULL)
    {
        puts("Problems");
        return EXIT_FAILURE;
    }
    for (int x = 1; x <= 6; x+=1)
    {
        fwrite(&j, sizeof(int), 1, pBinFile);
        int l = strlen(cString);
        fwrite(&l, sizeof(int), 1, pBinFile);
        fwrite(cString, l, 1, pBinFile); 
        fprintf(pTextFile, "%d%s%c", j, cString, cNewLine);
        j++;
    }
    
    fclose(pTextFile);
    fclose(pBinFile);
 
    int F = function(cString, cNewLine, j);
    int B = fBinFile(cString, cNewLine, j);
    _getch();
    return 0;
}
 
int function(char cString, char cNewLine, int j)
{
    char arr[N];
 
    pTextFile = fopen("D:\\TextFileW.txt", "r");
    
    printf("------------------This Is A Text File------------------\n");
    while (fgets (arr, N, pTextFile)!=NULL)
    printf("%s", arr);
    printf("\n");
    
    fclose(pTextFile);
    return -1;
}
 
int fBinFile(char cString, char cNewLine, int j)
{
    char secondarr[M];
    int l;
    
    pBinFile = fopen("D:\\BinFileW.bin", "rb");
    
    printf("------------------This Is A Binnary File------------------\n");
    while (fread(&j, sizeof(int), 1, pBinFile) > 0)
    {
        fread(&l, sizeof(int), 1, pBinFile);
        fread(secondarr, l, 1, pBinFile);
        secondarr[l] = '\0';
        printf("%d %s\n", j, secondarr);
    }
    
    fclose(pBinFile);
    return -1;
}
1
0 / 0 / 1
Регистрация: 08.05.2016
Сообщений: 51
23.05.2016, 20:26
Хочу немного продолжить тему:
как записать/прочитать в бинарный файл структуру?
например создаю структуру:
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
struct AZS //структура 
{
    char Kolich[35]; //имя
    char Family[35]; //фамилия
    char Summ[35]; //сумма
    int Date[3]; //дата поступления
    void Show(); //функция будет отображать данные
    void Input(); //функция ввода данных в структуру
};
 
void AZS::Input() //функцию боъявленную внутри структуры можно использовать вне структуры
{   
    
            cout<<"\n\n";
                        
            cout<<"дата заправки\t";
            
                cin>>Date[0]; //дата внутри структуры это массив поэтому обращение с индексом
                cin.ignore();           
                
                cin>>Date[1]; 
                cin.ignore();
                
                cin>>Date[2];
                cin.ignore();
 
            cout<<"фамилия\t\t";
            cin.getline(Family,35); //считали фамилию
 
            cout<<"количество\t\t";
            cin.getline(Kolich,35); //считали имя
            
            cout<<"Сумма\t\t";
                cin.getline(Summ,35);
            
                
                                
        cout<<"======================\n";
}
заполняю

C++
1
2
3
4
5
6
7
8
9
int N=1;
            AZS AZS[1];
            for(int i=0;i<N;i++) {
            AZS[1].Input();
            };  
                    ofstream bazafile;
                    bazafile.open ("baza2.bin", ios::binary | ios::app);
                    bazafile << AZS << endl;
                    bazafile.close();
вывожу
C++
1
2
3
4
5
6
7
8
9
10
11
char ch;
        ifstream in("baza2.bin", ios::in | ios::binary);
        if (!in) {
        cout << "Cannot open file.\n";
        return 1;
        }
        while (in) { 
        in.get (ch);
        cout << ch;
        }
        in.close();
и получаю нечто типа "0x22fe84"

с чем это может быть связано?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
23.05.2016, 22:52
bazafile.write() для записи, read() для чтения. Ну тот же принцип, что и с fwrite()/fread().
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2016, 22:52
Помогаю со студенческими работами здесь

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

Считать и записать информацию из ListBox в файл
ВОПРОС ТАКОЙ:У меня есть программа которая считывает из текстового поля информацию и вносит её в лист бокс и так же есть кнопка которая...

Как построчно считать и записать информацию в txt
какие есть методы какие методы оптимальны примеры реализаций

Считать информацию с xml1, xml2 и записать в xml3
Ребята привет. Подскажите пож-та. У меня есть куча папок, внутри которых лежит xml1, xml2. Они разной структуры. Мне необходимо считать...

Как считать и записать информацию в типизированный файл
как считать и записать в типизированный файл типа record???????


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru