С++ изменяет новую строку от CR + LF до LF
Я пишу код, который работает в Windows и выводит текстовый файл, который позже становится входом в программу в Linux. Эта программа ведет себя некорректно, если заданные файлы имеют новые строки, которые являются CR + LF, а не только LF.
Я знаю, что могу использовать такие инструменты, как dos2unix, но я бы хотел пропустить дополнительный шаг. Возможно ли получить программу на С++ в Windows для использования новой строки Linux вместо Windows?
Ответы
Ответ 1
Да, вы должны открыть файл в "двоичном" режиме, чтобы остановить перевод новой строки.
Как вы это делаете, зависит от того, как вы открываете файл.
Использование fopen
:
FILE* outfile = fopen( "filename", "wb" );
Использование ofstream
:
std::ofstream outfile( "filename", std::ios_base::binary | std::ios_base::out );
Ответ 2
ОК, так что это, вероятно, не то, что вы хотите услышать, но здесь мои $0,02, основанные на моем опыте:
Если вам нужно передавать данные между различными платформами, в конечном итоге вам, вероятно, лучше использовать формат, который не волнует, как выглядят строки. Если это текстовые файлы, пользователи будут иногда возиться с ними. Если, испортив окончание строки, это приведет к сбою вашего приложения, это будет приложение с интенсивной поддержкой.
Был там, сделал это, переключился на XML. Сделал поддержку парням намного счастливее.