Форум программистов, компьютерный форум CyberForum.ru

Считывание данных из бинарного файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread115779.html
Дана строка, заканчивающаяся точкой. Подсчитать, сколько слов в строке.
C++ <string.h> Из строки нужно удалить все слова в которых есть арабские цыфры. http://www.cyberforum.ru/cpp-beginners/thread115776.html
string И getline C++
string name; cout <<"Name -> "; getline(cin,name); cout <<"OK, "<<name; 2 раза требует ввод почему?
Запись информации в конец файла C++
Доброго времени суток!Появилась небольшая проблема, помогите, пожалуйста.Необходимо записать информацию в конец файла, у меня получается так, что при повторной работе программы данные, записанные в файл затираются, а новые записываются.Язык С++.Заранее благодарна!
C++ Вставить нулевую строку и нулевой столбец перед строкой и столбцом, где находится первый минимальный элемент. http://www.cyberforum.ru/cpp-beginners/thread115769.html
3. Вставить нулевую строку и нулевой столбец перед строкой и столбцом, где находится первый минимальный элемент. Люди,помогите написать прогу...
C++ Подсчитать количество слов в строке 1.Дано строку слова в которой разделены пробелом (1 или несколькими). Подсчитать количество слов в даной строке. 2.Дано текст. Подсчитать количество строк. подробнее

Показать сообщение отдельно
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
12.04.2010, 18:09  [ТС]     Считывание данных из бинарного файла
вот полный листинг dll модуля
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define DLL_import extern "C" __declspec(dllexport) 
 
typedef struct
{
    char name[15], mark[15];
    int price, num;
} Comp;
 
 
Comp *list = NULL;
int cnt = 0;
 
DLL_import int Add(Comp val)
{
    Comp *tmp = (Comp *) calloc(cnt+1, sizeof(Comp));
    if(!tmp) return 0;
    if(cnt) memcpy(tmp, list, cnt*sizeof(Comp));
    tmp[cnt] = val;
    cnt++;
    if(list) free(list);
    list = tmp;
    return 1;
}
 
DLL_import int Ins(int ind)
{
    if(ind < 0) ind = 0;
    Comp *tmp = (Comp *) calloc(cnt+1, sizeof(Comp));
    if(!tmp) return 0;
    memcpy(tmp, list, ind*sizeof(Comp));
    Comp val;
    char str[100];
    fflush(stdin);
    fgets(str, 99, stdin);
    if(strcmp(str,"") == 0) return 0;
    if(sscanf(str,"%s %s %u %u ", &val.name, &val.mark, &val.price, &val.num) == 4) tmp[ind] = val;
    memcpy(&tmp[ind+1], &list[ind], (cnt-ind)*sizeof(Comp));
    cnt++;
    free(list);
    list = tmp;
    return 1;
}
 
DLL_import void Destroy(void)
{
    if(list) free(list);
    list = NULL;
    cnt = 0;
}
 
DLL_import int Del(int ind)
{
    if((ind<0)||(ind>=cnt)) return 1;
    if(cnt == 1)
    {
        Destroy();
        return 0;
    }
    Comp *tmp = (Comp *) calloc(cnt-1, sizeof(Comp));
    memcpy(tmp, list, ind*sizeof(Comp));
    memcpy(&tmp[ind], &list[ind+1], (cnt-ind-1)*sizeof(Comp));
    cnt--;
    free(list);
    list = tmp;
    return 1;
}
 
DLL_import int LoadList(const char *name)
{
      FILE *f = fopen(name, "a+b");
if(!f){
    puts("Can't open file!");
    return 0;
  }
  fseek(f,0,SEEK_END);
  cnt = ftell(f);
  fseek(f,0,SEEK_SET);
  if(cnt % sizeof(Comp)){
    puts("Incorrect file!");
    fclose(f);
    return 0;
  }
  cnt /= sizeof(Comp);
  fread(list, sizeof(Comp), cnt, f);
  fclose(f);
  return 1;
 
}
 
//DLL_import int LoadList(const char *name)
//{
//  FILE *file = fopen(name, "r");
//  if(!file) return 1;
//  while(!feof(file))
//  {
//      Comp val;
//      int res = 1;
//      if(fscanf(file, "%s %s %u %u", &val.name, &val.mark, &val.price, &val.num) == 4) res = Add(val);
//      if(!res)
//      {
//          fclose(file);
//          return 2;
//      }
//  }
//
//  fclose(file);
//  return 0;
//}
 
DLL_import void Viev(void)
{
    if(cnt)
    {
        for(int i = 0; i < cnt; i++)
        {
            printf("%s [%s] %u %u\n", list[i].name, list[i].mark, list[i].price, list[i].num);
        }
    }
}
 
DLL_import int Input_StdIn(void)
{
    Comp val;
    char str[100];
    fflush(stdin);
    fgets(str, 99, stdin);
    if(strcmp(str,"") == 0) return 0;
    if(sscanf(str,"%s %s %u %u ", &val.name, &val.mark, &val.price, &val.num) == 4) Add(val);
    return 1;
}
 
DLL_import int SaveList(const char *name)
{ 
  FILE *f = fopen(name, "wb");
  if(!f) 
        {
        puts("File is not open!");
        return 0;}
  if(fwrite(list, sizeof(Comp), cnt, f) != cnt) { puts("Success writing to file!"); return 0;}
  fclose(f);
  return 1;
}
 
DLL_import int Edit(int ind)
{
    if((ind<0)||(ind>=cnt)) return 1;
    Ins(ind);
    Del(ind+1);
    return 1;
}
 
DLL_import int Menu(void)
{
    printf("Viberite deystvie:\n");
    printf("1 - Dobavit zapis\n");
    printf("2 - Vivesti soderzhimoe na ekran\n");
    printf("3 - Udalit zapis\n");
    printf("4 - Redaktirovat zapis\n");
    printf("0 - Vihod\n");
    int i;
    scanf("%d", &i);
    switch(i)
    {
    case 1:{printf("Vvedite zapis:\n"); Input_StdIn(); Menu(); break;}
    case 2:{Viev(); Menu(); break;}
    case 3:{int n; printf("Vvedite zapis kotoruyu hotite udalit\n"); scanf("%d", &n); Del(n); Viev(); Menu(); break;}
    case 4:{int n; printf("Vvedite zapis kotoruyu hotite redaktirovat\n"); scanf("%d", &n); Edit(n); Menu(); break;}
    case 0:{return 0;}
    }
}
 
 
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru