Cross- путаница в новой строке платформы

По какой-то причине моя функция записи в текстовый файл внезапно перестала работать.

void write_data(char* filename, char* writethis)
{
    ofstream myfile;
    myfile.open (filename, std::ios_base::app);
    myfile << endl << writethis;
    myfile.close();
}

Функция вызывалась из цикла, поэтому в основном она начиналась с пустой строки и добавляла все последующие строки «writeethis» на новой строке.

И вдруг никаких новых строк. Весь текст был добавлен в одну строку. Итак, я немного покопался и наткнулся на следующее:

  1. Windows = CR LF
  2. Linux = LF
  3. MAC <0SX = CR

Итак, я изменил строку на

myfile << "\r\n" << writethis;

, и это снова сработало.Но теперь я в замешательстве. Я кодирую на linux , но я читаю текстовые файлы, созданные с помощью программы, в окнах после их передачи с помощью filezilla . Теперь, какая часть этого привела к тому, что строки в текстовом файле выглядели как одна строка?

Я был почти уверен, что "endl" отлично работает для Linux, поэтому теперь я думаю, что окна испортили файл после переносить их с помощью filezilla? Неправильная запись (и чтение) текстового файла гарантирует, что моя программа сломается, поэтому, если кто-то может объяснить это, я буду признателен.

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

Изменить: Я попытался поменять местами режим передачи с ASCII / Binary (даже удалил принудительное ASCII-расширение-текст-текст), но это не имеет никакого значения. Новые строки появляются в Linux, но не в Windows. fz-messup

Как странно.

11
задан natli 7 November 2011 в 08:05
поделиться