Lecture ecriture dans un fichier binaire

Résolu
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008 - 14 juin 2006 à 19:09
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008 - 14 juin 2006 à 20:13
j'ai 2 tableaux : un de unsigned int et un de char "string"
unsigned int tabint[]={ xxx,xxx,xxx...};
char *tabnom[]={ "nom1","nom2","nom3"...};

je voudrais sauvegarder ces tableaux dans un fichier binaire (.dat ou autre)
d'après plusieurs sources d'ici, j'ai essayé avec ofstream fileout("file.dat"), fileout.write(reinterpret_cast<const char*>(&tabint[0]), sizeof(int))...

j'ai fait un premier essai avec le tableau de int
mais quand je lis le fichier, à la 6ème valeur, plus rien : je me retrouve avec -128,-1,-1,-1... 

comme je ne veux pas sauvegarder sous forme de texte, comment cela fonctionne-t-il donc ?

4 réponses

cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
14 juin 2006 à 19:17
PS: je precise que j'ai fait le meme essai avec le tableau de char et là ça passe sans problème ! etrange...
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
14 juin 2006 à 19:26
unsigned int
tabint[]={ xxx,xxx,xxx...};
eout.write(reinterpret_cast<const char*>(&tabint[0]), sizeof(int))...

Si tu veux ecrit en mode texte eout << tabint[0]; par exemple

++
3
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
14 juin 2006 à 19:39
oui, mais je ne veux pas ecrire en mode texte

voilà un exemple de ce qu'il se passe avec ce tableau :
unsigned int tabint[]={1200000, 1000000, 800000, 600000, 400000, 200000,100000,90000};
unsigned int tablecture[]={0,0,0,0,0,0,0,0};

je fais une boucle
for(i=0;i<10;i++){ file.write(...(&tabint[i],sizeof(int)); }

après lecture, j'ai :
1200000, 1000000, 800000, 600000, 128, 0, 0, 0, 0, 0
3
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
14 juin 2006 à 20:13
bon bin finalement je vais pas utiliser ofstream
je vais passer par le standard FILE, fopen("file.dat","w+b")/fopen("","r+b") et fwrite/fread
ça marche impec et en plus le fichier est moins gros

ps: n'empêche, j'aimerai quand meme bien savoir d'où ça vient le probleme avec les int
3
Rejoignez-nous