28. oktober 2003 - 16:27
Der er
14 kommentarer og 1 løsning
skrive/læse klasser fra fil (c++ ikke c)
Jeg har brug for at kunne læse noget data fra en fil og skabe nogle objekter herfra. At skrive er jo forholdsvis let men at læse ... Nå men jeg overvejer at lave en slags TLV indkoding, men vil lige høre om der er nogle bedre forslag (måske mere standard løsninger) De objekter jeg skal læse har følgende attributter double val; list<double>; int id; altså, de er rimelig simple
Annonceindlæg fra DE-CIX
28. oktober 2003 - 16:56
#1
Du har med andre ord brug for serialisering og deserialisering !
28. oktober 2003 - 17:00
#2
Du bliver nødt til at håndkode noget. skriv 8 byte med val skriv 4 byte med id skriv 4 byte med antal i liste skriv N*8 bytes med indhold af liste og omvendt med læsning.
28. oktober 2003 - 17:00
#3
Jeg ville bruge C fwrite og fread til at læse og skrive med.
28. oktober 2003 - 17:04
#4
Men man kan også åbne C++ og fstream med ios::binary - jeg har bare aldrig set nogen grund til det.
28. oktober 2003 - 23:27
#5
Jeg ville måske vælge at bruge sizeof(int) og sizeof(double) i stedet for 4 og 8.
29. oktober 2003 - 06:08
#6
Selvfølgelig.
29. oktober 2003 - 09:59
#7
Jeg har lidt problemer med 1. argument til fwrite som skal være const void* eks: int i; i = 20; fwrite(i, sizeof(i), 1, outfile); virker ikke. Hvad skal jeg gøre for at få int -> const void* (printf?) og kan jeg bruge sizeof(i) eller skal det være sizeof(int)?
29. oktober 2003 - 11:06
#8
&i
29. oktober 2003 - 11:07
#9
Hvis i er int så returnerer sizeof(i) og sizeof(int) det samme. Jeg ville bruge sizeof(int) fordi så ændres det automatisk hvis du ændrer typen af i.
29. oktober 2003 - 13:06
#10
Jeg skriver første gang til filen således int nroftrustdata = tvalues.size();//nr of stored int trustvalues fwrite(&nroftrustdata,sizeof(int),1,fdata); jeg kan se at nroftrustdata ikke er 0. men når jeg læser : char buf[255]; fread(buf,sizeof(int),1,fdata); int nroftrustdata = atoi(buf); så er nroftrustdata = 0 ?? Hvad gør jeg galt?
29. oktober 2003 - 13:13
#11
fwrite skriver binært, fread læser binært atoi forventer tekst prøv med: int nroftrustdata; fread(&nroftrustdata,sizeof(int),1,fdata);
29. oktober 2003 - 13:28
#12
tusind tak arne! Så virker det - så læg et svar så vi kan komme videre :)
29. oktober 2003 - 13:33
#13
ok
29. oktober 2003 - 19:19
#14
>arne_v, du skrev: Jeg ville bruge sizeof(int) fordi så ændres det automatisk hvis du ændrer typen af i. Jeg tror du mener: Jeg ville bruge sizeof(i) fordi så ændres det automatisk hvis du ændrer typen af i.
29. oktober 2003 - 19:22
#15
Ja selvfølgelig - det jeg skrev er da noget sludder.
Kurser inden for grundlæggende programmering