Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/27: Рейтинг темы: голосов - 27, средняя оценка - 4.93
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89

Запись в бинарный файл

17.03.2010, 20:47. Показов 5602. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите пожалуйста, правильно ли работает моя программа? (Имеется ввиду запись в бинарный файл)

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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
 
typedef struct Client
{
 int Num;
 char SurName[27];
 char Name[21];
 char SecName[21];
};
 
int main(void)
{
 FILE *stream;
 int i=0;
 Client *AClient=new Client[5];
 
 //Открытие файла для вывода
 if ((stream = fopen("sample.dat", "w+b")) == NULL)
 {
     printf("Cannot open output file.\n");
     return 1;
 }
 
//Заполнение полей структуры
 for (i=0; i<5; i++)
 {
     AClient[i].Num = i;
     strcpy(AClient[i].SurName,"Petrov");
     strcpy(AClient[i].Name, "Petr");
     strcpy(AClient[i].SecName, "Petrovich");
 }
 //Запись структуры в файл 
 fwrite(&AClient, sizeof(AClient), 5, stream);
 
 //Закрытие файла файла
 fclose(stream);
 
Client *RClient=new Client[5];
//Открытие файла для чтения 
 if ((stream = fopen("sample.dat", "rb"))== NULL)
 {
     printf("Cannot open input file.\n");
     return 2;
 }
 fread(&RClient, sizeof(RClient), 5, stream);
 
 //Закрытие файла
 fclose(stream);
 for (int i=0; i<5; i++)
 {
     printf("The structure contains:\n");
     printf("Num = %d  SurName = %s \n", RClient[i].Num, RClient[i].SurName);
     printf("Name = %s SecName = %s\n\n", RClient[i].Name, RClient[i].SecName);
 }
 delete AClient;
 delete RClient;
 return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2010, 20:47
Ответы с готовыми решениями:

Запись в бинарный файл
Делаю курсовую работу. Шаблонный класс, выполняющий функции двоичного файла, хранящего в себе двусвязный список объектов. Все работает...

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

Запись в бинарный файл
Вот функция добавления данных: void addConstellations() { system(&quot;CLS&quot;); int n; wcout &lt;&lt; L&quot;Введите количество вводиммых...

10
 Аватар для Sekt
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
17.03.2010, 21:15
я бы записывал внутри цикла.
P.s и какой смысл закрывать файл до чтения данных.
0
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
17.03.2010, 22:41  [ТС]
Скажите, а как мне быть, если, скажем, я выделяю память под массив структур [10], заполняю только 2 структуры. Потом сохраняю всё это в файл, и выхожу из программы. Снова захожу в программу, снова выделяю то же самое, открываю файл для обновления... Но как мне соединить мои сохранённые записи с новым массивом структур? Или это будет всё происходить автоматически?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.03.2010, 09:31
новые структуры будут записываться после старых в режиме ab
файл можно не закрывать, а перемотать - rewind()
можно ещё более точно переставлять указатель в файле - fseek()

Добавлено через 2 минуты
можно размер файла ftell() поделить на размер структуры sizeof
а можно по одной читать, пока файл не кончится
это чтобы узнать, сколько структур в файле
1
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
18.03.2010, 20:24  [ТС]
Еще один вопрос.
Вот функция считывания из бинарного файла fread():
fread(RClient, sizeof(RClient), 1, stream);
Какую роль играет "1"?
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
18.03.2010, 21:02
1 - количество записей, которые читаются из файла. Если напишешь 10, будет попытка прочитать сразу 10 клиентов как массив.
1
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
19.03.2010, 00:42  [ТС]
Спасибо.)

Вопрос: почему не работает эта программа? Файл записывается, а считывать - не считывается..((

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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
 
typedef struct Client
{
 int Num;
 char SurName[27];
 char Name[21];
 char SecName[21];
};
int main()
{
 FILE *stream;
 int i=0;
 int a;
 Client *AClient=new Client[5];
 
 //Открытие файла для вывода
 if ((stream = fopen("sample.dat", "rb")) == NULL)
 {
     printf("Cannot open output file.\n");
     return 1;
 }
fread(AClient, sizeof(AClient), 100, stream);
AClient[0].Num=0;
int &counter=AClient[0].Num;
cout<<counter;
//Заполнение полей структуры
cin>>a;
switch (a)
{
case 0:
    {
        for (int i=0; i<5; i++)
        {
            strcpy(AClient[i].SurName,"Petrov");
            strcpy(AClient[i].Name, "Petr");
            strcpy(AClient[i].SecName, "Petrovich");
            counter++;
        }
        break;
    }
case 1:
    {
        for (int i=0; i<counter; i++)
        {
            printf("The structure contains:\n");
            printf("Num = %d  SurName = %s \n", i, AClient[i].SurName);
            printf("Name = %s SecName = %s\n\n", AClient[i].Name, AClient[i].SecName);
        }
    }
}
 //Запись структуры в файл 
 fwrite(AClient, sizeof(AClient), 100, stream);
 
 //Закрытие файла файла
 fclose(stream);
 
 delete AClient;
 return 0;
}
Добавлено через 38 минут
PS. В этой программе разобрался уже сам.)) Спасибо всем за помощь.))

Добавлено через 3 часа 0 минут
Цитата Сообщение от Sasuke Посмотреть сообщение
Еще один вопрос.
Вот функция считывания из бинарного файла fread():
fread(RClient, sizeof(RClient), 1, stream);
Какую роль играет "1"?
Цитата Сообщение от Nick Alte Посмотреть сообщение
1 - количество записей, которые читаются из файла. Если напишешь 10, будет попытка прочитать сразу 10 клиентов как массив.
Вопрос по это й теме. Можно ли более подробней объяснить, ибо немного не понятно. Как зависит это число от массива (в моём случае структур)? Это как-то связано с его размером?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.03.2010, 04:55
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
4.9.8.1 The fread function
 
Synopsis
 
         #include <stdio.h>
         size_t fread(void *ptr, size_t size, size_t nmemb,
                  FILE *stream);
 
Description
 
   The fread function reads, into the array pointed to by ptr , up to
nmemb members whose size is specified by size , from the stream
pointed to by stream .  The file position indicator for the stream (if
defined) is advanced by the number of characters successfully read.
If an error occurs, the resulting value of the file position indicator
for the stream is indeterminate.  If a partial member is read, its
value is indeterminate.
 
Returns
 
   The fread function returns the number of members successfully read,
which may be less than nmemb if a read error or end-of-file is
encountered.  If size or nmemb is zero, fread returns zero and the
contents of the array and the state of the stream remain unchanged.
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.03.2010, 17:24
C
1
2
3
4
5
RClient clients[17];
void ReadClients(FILE *f)
{
    fread(clients, sizeof(RClient), 17, f);
}
0
 Аватар для Sasuke
1 / 1 / 0
Регистрация: 09.10.2009
Сообщений: 89
01.04.2010, 18:41  [ТС]
Хотел еще кое-что спросить. У меня складывается след. ситуация. Есть программа, содержащая массив структуры [10], в которой еще есть одна переменная, которая яляется еще одной структурой, в ней еще, там еще... + помимо этой структуры есть еще и массив структуры [5]. Мне всё это дело нужно записывать в бинарный файл. Вопрос: почему у меня не записывает всё это в файл, когда я делаю сл. образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
.....
int main ()
{
     FILE *f;
     // открываю файл
     // свичём выполняю пару действий (ввод структуры, например, или её части)
     ....
     // при выходе делаю сл.
     fwrite(К, sizeof(К), 10, а);
}
// ниже размещены функции.. много...
В это время, мой бинарный файл содержит 1Кб информации... Я пытаюсь его открыть через блокнот, а так всего три символа.. ПОтом, пытаюсь считать с файла, и оно естественно не работает. Я очень прошу мне помочь, очень нужнен совет!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
02.04.2010, 09:12
неясно K, это что
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2010, 09:12
Помогаю со студенческими работами здесь

Запись в бинарный файл
Здравствуйте. Прошу помочь разобраться с проблемой. Необходимо записать в двоичный файл 8-байтовое число, но не как строку, а...

Запись в бинарный файл
Всем привет. Подскажите пожалста как через fstream добавить запись в бинарный файл ? нужно добавить именно В НАЧАЛО , не очищая...

Запись в бинарный файл
Подскажите пожалуйста,где в коде ошибка??никак найти не могу почему х не считает. В файл записываются 0. Задние на картинке. #include...

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
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