Ofstream, Unix et Windows sont dans un bateau

Voila, j’ai une colle qu’un de mes collegues doit resoudre pour un projet. Ce projet est en fait le portage d’une application C++ d’UNIX vers WINDOWS. Pas de soucis majeur, excepte les fichiers de sauvegarde: une partie des fichiers sauvee est ascii. Et paf, le separateur de fin de ligne differe: “\n” sous UNIX, “\r\n” sous Windows.
D’ou un soucis lors des relectures d’un format sur un autre. Il choisit donc de garder la compatibilité “unix” pour les fichiers et veut donc inserer qu’un seul caractere “\n” en fin de lignes sous windows.
Le soucis, c’est l’utilisation des endl dans les streams. D’apres ces dires, ca lui insere toujours “\r\n” dans le fichier, meme s’il ouvre le dit fichier en mode binaire. Quelqu’un a une solution (option de compilation, code simple, etc…) a lui passe pour le depanner?

En utilisant “\n” directement plutot que endl ?

[quote name=‹ BokLM › date=’ 5 Apr 2005, 20:41’]En utilisant « \n » directement plutot que endl ?
[right][post=« 347478 »]<{POST_SNAPBACK}>[/post][/right][/quote]
oui, mais passer dans un code de 1 millions de ligne pour changer endl en ‹ \n ›, c’est pas glop quand meme :stuck_out_tongue:

Je vois pas trop l’interet de changer le comportement de endl, si c’est pour que ca marche pareil en relecture ca va marcher pareil tout seul a priori, si c’est pour que les binaires soient strictement identiques, pourquoi pas mais bon…

Sinon a priori, en C++, c’est pas complique, trouves le .h ou endl est definit en tant que \n ou \r\n en fonction de la plateforme et change le pour etre toujours \n. Basta.

[quote name=‹ GloP › date=’ 5 Apr 2005, 23:36’]Je vois pas trop l’interet de changer le comportement de endl, si c’est pour que ca marche pareil en relecture ca va marcher pareil tout seul a priori, si c’est pour que les binaires soient strictement identiques, pourquoi pas mais bon…

Sinon a priori, en C++, c’est pas complique, trouves le .h ou endl est definit en tant que \n ou \r\n en fonction de la plateforme et change le pour etre toujours \n. Basta.
[right][post=« 347529 »]<{POST_SNAPBACK}>[/post][/right][/quote]

C’est bien ca le probleme, les études (donc les données) doivent etre lisible depuis une plateforme unix ou windows.
Changer le header du compilo? Beurk quand meme :confused:

Si le programme avait bien été écrit, il n’y aurait pas 1 million de lignes à parcourir…

Donc dans ce cas là, changer le header ne me parait pas si dégeux que ça.

Tu changes pas forcement le header de la std lib, en general t’as un autre include commun a tout les fichier qui est specifique a ton projet, et qui sert justement a ce genre de trus, tu redefinit endl la.

tu fais tu utilises pas std::endl;

Tu fais pas ca et tu definies dans un tes headears endl
using namespace std;

Koubiak que un peu comme glop