Ik ben in c aan het proberen een behoorlijk grote struct naar een bestand weg te schrijven. Deze struct bevat char[], ints en double's.
Nu heeft c daar een optie voor, namelijk fwrite.
size_t fwrite(void *ptr, size_t size, size_t nobj, FILE *stream)
Waarna je ze weer kunt inlezen met het identiek werkende fread.
Maar dat gaat helemaal mis bij mij. Ik dacht eerst dat het lag aan struct alignment, maar ik heb de struct nu zo gemaakt dat ie precies 392 bytes is, dus dat er niet gealignt wordt omdat alles al goed staat. En het werkt nog steeds niet.
Ik heb een array van 12 keer deze struct. Het rare is dat in het bestand het eerste element dus 394 bytes inneemt, en de tweede 392 en de derde 395. Een beetje vreemd dus.
Ik zal een stukje code geven:
Weet iemand wat hier mis gaat? Of weet iemand misschien een andere methode om de hele struct netjes naar een bestand te krijgen.
Nu heeft c daar een optie voor, namelijk fwrite.
size_t fwrite(void *ptr, size_t size, size_t nobj, FILE *stream)
Waarna je ze weer kunt inlezen met het identiek werkende fread.
Maar dat gaat helemaal mis bij mij. Ik dacht eerst dat het lag aan struct alignment, maar ik heb de struct nu zo gemaakt dat ie precies 392 bytes is, dus dat er niet gealignt wordt omdat alles al goed staat. En het werkt nog steeds niet.
Ik heb een array van 12 keer deze struct. Het rare is dat in het bestand het eerste element dus 394 bytes inneemt, en de tweede 392 en de derde 395. Een beetje vreemd dus.
Ik zal een stukje code geven:
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
| typedef struct { char naam[96]; int dnet_id; int seti_id; int sob_id; int ecc2_id; int tsc_id; int d2ol_id; int ptotr[9]; int phuir[9]; double ptot[9]; double phui[9]; double hui; double tot; double dnet; double seti; double others; double index; int others_id; int extra; } teamtype; teamtype team[12]; void fwriteteam() { FILE *fp=fopen("test.dat", "w"); fwrite(team, sizeof(teamtype), 12, fp); fclose(fp); } void freadteam() { FILE *fp=fopen("test.dat", "r"); fread(team, sizeof(teamtype), 12, fp); fclose(fp); } |
Weet iemand wat hier mis gaat? Of weet iemand misschien een andere methode om de hele struct netjes naar een bestand te krijgen.
[ Voor 10% gewijzigd door Diadem op 02-02-2003 17:43 ]
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life - Terry Pratchett