Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Zordaxo
1 / 1 / 0
Регистрация: 03.12.2015
Сообщений: 25
#1

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

22.05.2016, 20:12. Просмотров 362. Ответов 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++):

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

Считать в строку из бинарного файла - C++
Здравствуйте! Как считать в строку данные из бинарного файла Таким образом не работает char* str; str = new char ; ...

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

Как считать числа из бинарного файла - C++
Стоит задача: записать простые числа в бинарный файл. Числа берутся из промежутка 1...n. Все сделал, но не получается вывести в консоль...

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

Как считать информацию с файла - C++
Помогите пожалуйста разобраться с файлами. При считывании из файла в методе void Users::LoadFile() (Файл Users.cpp) попадаю в бесконечный...

6
nmcf
5530 / 4840 / 1638
Регистрация: 14.04.2014
Сообщений: 19,636
22.05.2016, 22:00 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Режим.
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 / 0
Регистрация: 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
5530 / 4840 / 1638
Регистрация: 14.04.2014
Сообщений: 19,636
23.05.2016, 14:46 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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 / 0
Регистрация: 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 / 0
Регистрация: 08.05.2016
Сообщений: 11
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
5530 / 4840 / 1638
Регистрация: 14.04.2014
Сообщений: 19,636
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
Привет! Вот еще темы с ответами:

Не получается считать из файла информацию - C++
У меня есть текстовый файл. Мне нужно считать в нем строчки, такого типа: qwert 12345 asdfghjk 213213 tgyhh 39482 Имена...

Как считать информацию с текстового файла? - C++
Нужна помощь! Мне необходимо создать пользовательскую функцию, которая будет считывать информацию с текстового файла.

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

getline() (не получается считать информацию с файла) - C++
Здравствуйте. У меня есть файл вида: volleyball 1 sports.ru 500 volleyball football Первая строка - искомый тег, вторая -...


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

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

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