Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Zordaxo
1 / 1 / 2
Регистрация: 03.12.2015
Сообщений: 25
#1

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

22.05.2016, 20:12. Просмотров 615. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2016, 20:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Записать и считать информацию из бинарного файла (C++):

Считать в строку из бинарного файла
Здравствуйте! Как считать в строку данные из бинарного файла Таким образом...

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

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

Как считать числа из бинарного файла
Стоит задача: записать простые числа в бинарный файл. Числа берутся из...

Как считать из бинарного файла AnsiString (ifstream)?
ifstream read(&quot;Edit1.txt&quot;,std::ios::binary); int Size;...

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

6
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
22.05.2016, 22:00 #2
Лучший ответ Сообщение было отмечено 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
Zordaxo
1 / 1 / 2
Регистрация: 03.12.2015
Сообщений: 25
22.05.2016, 23:15  [ТС] #3
Спасибо за совет,запись сделать получилось,работает правильно,но не могу понять как сделать чтение из бинарного и вывод на консоль
Вот код:
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
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
23.05.2016, 14:46 #4
Лучший ответ Сообщение было отмечено 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
Zordaxo
1 / 1 / 2
Регистрация: 03.12.2015
Сообщений: 25
23.05.2016, 20:02  [ТС] #5
Может быть я где то туплю,не могу понять,при запуске консоль прекращает работу(Прекращена работа программы "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
Pray
0 / 0 / 1
Регистрация: 08.05.2016
Сообщений: 17
23.05.2016, 20:26 #6
Хочу немного продолжить тему:
как записать/прочитать в бинарный файл структуру?
например создаю структуру:
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
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
23.05.2016, 22:52 #7
bazafile.write() для записи, read() для чтения. Ну тот же принцип, что и с fwrite()/fread().
1
23.05.2016, 22:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2016, 22:52
Привет! Вот еще темы с решениями:

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

Не получается считать из файла информацию
У меня есть текстовый файл. Мне нужно считать в нем строчки, такого типа:...

Считать числа с бинарного файла, найти их среднее арифметическое и вывести его на экран
написать программу, которая считывает числа с бинарного файла, находит их...

Считать информацию из с файла массив посимвольно
с++ как достать инфу с файла, и забить в массив по-символьно?


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

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

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