Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 16.06.2015
Сообщений: 88
1

Запись и чтение бинарных файлов

11.10.2015, 01:35. Показов 744. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с написанием программы.Нужно сделать запись и чтение из бинарный файла для типа данных long.
Прилагаю код. ввод в бинарный работает но почему-то не хочет останавливаться когда надо. а вывод не работает.Выводит совершенно другие цифры а на те что были введены.Помогите пожалуйста что где не так
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
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
 
#define ERROR_OPEN_FILE -3 
#define SIZE 10 
 
void main(int argc, char *argv[]) { 
 FILE *iofile = NULL; 
 unsigned long counter; 
 int i, num; 
 int pos; 
 int value = 0; 
 
 int menu; 
 int yn; 
 printf("1.List\n2.Add\n3.Find\n4.Exit\n"); 
 printf("Selection: "); 
 scanf("%d",&menu); 
 if (menu==1){ 
 iofile = fopen("numbers.bin", "rb"); 
 if (iofile == NULL) { 
 printf("Error opening file"); 
 getch(); 
 exit(ERROR_OPEN_FILE); 
 } 
 
 for (i = 0; i < SIZE; i++) { 
 fread(&value, sizeof(long), 1, iofile); 
 printf("%d ", value); 
 } 
 fclose(iofile); 
 getch(); 
} 
 else if(menu==2){ 
iofile = fopen("numbers.bin", "wb"); 
 if (iofile == NULL) { 
 printf("Error opening file"); 
 getch(); 
 exit(ERROR_OPEN_FILE); 
 } 
 fwrite(&counter, sizeof(long), 1, iofile); 
 do { 
 printf("Enter position [0..9] "); 
 scanf("%d", &pos); 
 if (pos < 0 || pos >= SIZE) { 
 break; 
 } 
 printf("Enter value "); 
 scanf("%d", &value); 
 fseek(iofile, pos*sizeof(long), SEEK_SET); 
 fwrite(&value, sizeof(long), 1, iofile); 
 rewind(iofile); 
 } while(1); 
 
 fclose(iofile); 
 getch(); 
} 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2015, 01:35
Ответы с готовыми решениями:

Запись и чтение бинарных файлов
Здравствуйте. Возник вопрос: задание считать текстовый файл и записать его в бинарник по одной...

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

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

Компилятор Си для бинарных исполняемых файлов
Доброго времени! многие перехваливают этот язык из-за &quot;простоты&quot; и &quot;переносимости&quot; (по сравнению с...

1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.10.2015, 06:00 2
Цитата Сообщение от Faust611 Посмотреть сообщение
что где не так
Да, все "не так", начиная с форматирования.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include "stdafx.h"
 
#include<stdio.h>
 
#define MAX_NUM            (10)
#define DATA_FILE          "numbers.bin"
 
static void List()
{
   FILE*    pIn = fopen(DATA_FILE,"rb");
 
   int   iFileSize = 0;
   int   iItemsCnt = 0;
   int   iValue    = 0;
 
   if (!pIn)
   {
      printf("File [%s] open error!\n",DATA_FILE);
      return;
   }
      
   // Get File size
   if (fseek(pIn,0,SEEK_END))
   {
      // Error !
      printf("File [%s] seek error!\n",DATA_FILE);
      fclose(pIn);
      return;
   }
 
   iFileSize = ftell(pIn);
 
   if (!iFileSize)
   {
      printf("File [%s] open error!\n",DATA_FILE);
      return;
   }
 
   iItemsCnt = iFileSize / sizeof(int); 
 
   rewind(pIn);
 
   for (int ii = 0; ii < iItemsCnt; ++ii) 
   {
      if (fread(&iValue,sizeof(int),1,pIn) != 1)
      {
         printf("File [%s] read error!\n",DATA_FILE);
         fclose(pIn);
         return;
      }
 
      printf("Pos: %d, Value %d\n",ii + 1,iValue);
   }
 
   fclose(pIn);
}
 
static void Add()
{
   while (true)
   {
      int   iPos   = 0;
      int   iValue = 0;
 
      printf("Enter value position [0..9] or any other value to stop input:  ");
   
      scanf("%d",&iPos);
 
      if ((iPos < 0) || (iPos >= MAX_NUM)) 
      {
         // Error !
         printf("Invalid position [%d]\n",iPos);
         return;
      }
 
      printf("Enter value:  ");
 
      scanf("%d",&iValue);
 
      FILE*    pOut = fopen(DATA_FILE,"r+b");
 
      if (!pOut)
      {
         printf("File [%s] open error!\n",DATA_FILE);
         return;
      }
 
      if (fseek(pOut,iPos * sizeof(int),SEEK_SET))
      {
         // Error !
         printf("File [%s] seek error!\n",DATA_FILE);
         fclose(pOut);
         return;
      }
 
      if (fwrite(&iValue,sizeof(int),1,pOut) != 1)
      {
         // Error !
         printf("File [%s] write error!\n",DATA_FILE);
         fclose(pOut);
         return;
      }
 
      fclose(pOut);
   }
}
 
static void Find()
{
   // Haven't yet implemented !
}
 
int main(int argc,char** argv)
{
   // Be sure file exist before any operations with it.
   FILE*    pFile = fopen(DATA_FILE,"a");
 
   if (!pFile)
   {
      // Error !
      printf("File [%s] can;t be open for operation!\n",DATA_FILE);
      fclose(pFile);
      return 0;
   }
 
   fclose(pFile);
 
   int   iChoice;
 
   while (true)
   {
      printf("\nDo your selection:\n1 - List,  2 - Add,  3 - Find,  0 - Exit\n");
 
      scanf("%d",&iChoice);
 
      switch (iChoice)
      {
         case 1:
         {
            List();
            break;
         }
         case 2:
         {
            Add();
            break;
         }
         case 3:
         {
            Find();
            break;
         }
         case 0:
         {
            exit(0);
            break;
         }
         default :
         {
            // Continue Loop
            break;
         }
      }
   }
 
   return 0;
}
Миниатюры
Запись и чтение бинарных файлов  
0
11.10.2015, 06:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2015, 06:00
Помогаю со студенческими работами здесь

Обработка бинарных файлов - исправить ошибку
Всем привет, вот прога с ошибкой (знаю где)! :wall: Задание: Составить программу, выполняющую...

Выполнить слияние двух рассортированных бинарных файлов в третий упорядоченный файл
Доброго времени суток уважаемые форумчане!!!! У меня есть следующая задача - Выполнить слияние...

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

Запись/чтение из файла
#include &lt;stdio.h&gt; main() { char product_name; int product_mass; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru