Bonjour
Y-a-t-il un moyen standard d'�crire et de lire une string dans un fichier binaire en C++ ?
merci
Bonjour
Y-a-t-il un moyen standard d'�crire et de lire une string dans un fichier binaire en C++ ?
merci
Si on part du principe ou tu utilise fstream, il y a la methode read ou bien l'operateur <<.
j'ai essay� d'�crire:
et de relire le tout par
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 int a=50, b=80; string s="Un essai de chaine"; ofstream f("toto.xyz",ios::out | ios::binary); f.write((char *)&a,sizeof(int)); f<<s; f.write((char *)&b,sizeof(int)); f.close();
et apparemment �a ne mmarche pas.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 f=fopen("toto.xyz","rb"); ifstream f("toto.xyz",ios::in| ios::binary); f.read((char *)&a,sizeof(int)); f>>s; f.read((char *)&b,sizeof(int)); f.close();
J'ai essay� aussi
avec le m�me code que pr�c�demment pour la relecture et �a marche pas.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 int a=50, b=80; string s="Un essai de chaine"; ofstream f("toto.xyz",ios::out | ios::binary); f.write((char *)&a,sizeof(int)); f.write(s.c_str(),s.size()+1); f.write((char *)&b,sizeof(int)); f.close();
J'ai peut d'�tre oblig� d'�crire d'abord la valeur de s.size() et ensuite de lire un tableau de char mais �a me parait compliqu� !
merci
La seule m�thode qui semble marcher est la suivante :
et pour relire
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 int a=50, b=80; string s="Un essai de chaine"; ofstream f("toto.xyz",ios::out | ios::binary); f.write((char *)&a,sizeof(int)); int t; t=s.size()+1; f.write((char *)&t,sizeof(int)); f.write(s.c_str(),t); f.write((char *)&b,sizeof(int)); f.close();
�a me parait compliqu� !
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 ifstream f("toto.xyz",ios::in| ios::binary); f.read((char *)&a,sizeof(int)); int t; f.read((char *)&t,sizeof(int)); char *buf=new char[t]; f.read(buf,t); s=string(buf); delete []buf; f.read((char *)&b,sizeof(int)); f.close();
Les flux ne peuvent pas d�terminer, lors de la lecture, o� s'arr�te la cha�ne de caract�res.
Je crois que les espaces et les retours charriots sont concid�r�s comme des fin de chaines non ?Envoy� par loufoque
Pas dans les �critures brutes qui (de)s�rialisent des nombres connus d'octets.
Quel est le probl�me avec les fichiers texte formatt�s ?
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...
Salut !!
J'ai choisi cette solution pour �crire des petits (max 5/6 Ko) fichiers images venant de MySQL (je c pas ce que �a vaut mais �a marche)
Voil� ... C'est assez flou aussi pour moi ces histoire de flux texte et binaire (alors que je vois pas de diff�rences mais bon)
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // Fichier temporaire image ofstream file("data.m2d",ios::binary|ios::out|ios::trunc); if (!file) throw MemException("Impossible d'écrire dans ce fichier temporaire"); string dataimg = lurl[i]; <--- Ici lurl = c'est un vector<string> string :: const_iterator sit = dataimg.begin(); while (sit!= dataimg.end()) { char c = *sit; file.write(&c,sizeof(char)); ++sit; }; file.close(); // Et après je l'ouvre avec la SDL
Salut tous , j'ai un probl�me qui a un rapport avec ton sujet mais cette fois je veux utiliser un read(buffer,length) et buffer est un std::string et length est la longeur en int , mais je rencontre une erreur , je crois que je dois lui passer un char* alors que je lui passe un std::string , sait quelqu'un de vous comment utiliser un std::string avec le membre read ?
( Note : ne me dites pas d'abandonner et d'utiliser les anciens fonctions C , je veux moi utiliser du C++ ! )
Merci d'avance .
@+ Bouazza
Pour des buffers, pr�f�res plut�t std::vector.
Quant aux deux types de fichiers, c'est en rapport avec les interp�tations de certaines s�quences comme les sauts de lignes. C'est pas dans une des FAQ ?
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...
Partager