C ++ change de nouvelle ligne de CR + LF à LF

J’écris du code qui s’exécute dans Windows et génère un fichier texte qui deviendra plus tard l’entrée d’un programme sous Linux. Ce programme se comporte de manière incorrecte lorsqu’il est donné des fichiers qui ont des nouvelles lignes qui sont CR + LF plutôt que simplement LF.

Je sais que je peux utiliser des outils comme dos2unix, mais je voudrais sauter l’étape supplémentaire. Est-il possible d’obtenir un programme C ++ sous Windows pour utiliser Linux newline au lieu de Windows?

Oui, vous devez ouvrir le fichier en mode “binary” pour arrêter la traduction de la nouvelle ligne.

Comment vous le faites dépend comment vous ouvrez le fichier.

En utilisant fopen :

 FILE* outfile = fopen( "filename", "wb" ); 

Utiliser ofstream :

 std::ofstream outfile( "filename", std::ios_base::binary | std::ios_base::out ); 

OK, donc ce n’est probablement pas ce que vous voulez entendre, mais voici mon 0,02 $ basé sur mon expérience avec ceci:

Si vous devez transmettre des données entre différentes plates-formes, à long terme, il est probablement préférable d’utiliser un format qui ne se soucie pas des sauts de ligne. Si ce sont des fichiers texte, les utilisateurs les gâchent parfois. Si en faisant échouer les fins de ligne, vous faites échouer votre application, cela va être une application nécessitant beaucoup de support.

Été là, fait cela, passé à XML. Les gars de soutien sont beaucoup plus heureux.