C ++ переводит новую строку с CR + LF на LF - PullRequest
18 голосов
/ 08 октября 2009

Я пишу код, который запускается в Windows и выводит текстовый файл, который впоследствии становится входом для программы в Linux. Эта программа ведет себя некорректно, когда передаются файлы с символами новой строки, которые являются CR + LF, а не просто LF.

Я знаю, что могу использовать такие инструменты, как dos2unix, но я бы хотел пропустить дополнительный шаг. Можно ли заставить программу на C ++ в Windows использовать новую строку для Linux вместо Windows?

Ответы [ 2 ]

26 голосов
/ 08 октября 2009

Да, вам нужно открыть файл в «двоичном» режиме, чтобы остановить перевод новой строки.

Как вы это сделаете, зависит от того, как вы открываете файл.

Использование fopen:

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

Использование ofstream:

std::ofstream outfile( "filename", std::ios_base::binary | std::ios_base::out );
0 голосов
/ 09 октября 2009

ОК, так что это, вероятно, не то, что вы хотите услышать, но вот мои $ 0,02, исходя из моего опыта с этим:

Если вам нужно передавать данные между различными платформами, в конечном итоге вам, вероятно, лучше использовать формат, который не заботится о том, как выглядят разрывы строк. Если это текстовые файлы, пользователи иногда будут связываться с ними. Если путаница в конце строки приведет к сбою приложения, это будет приложение с интенсивной поддержкой.

Был там, сделал это, переключился на XML. Сделали поддержку ребята намного счастливее.

...