Я пытаюсь написать файл .dat, используя подсистему Windows для Linux, но библиотека fstream, похоже, обходит каждую команду endline. Вот мой код:
int main()
{
string fname = "DataSheet.dat";
ofstream fdata (fname.c_str(), ios::out);
fdata << "First line" << endl;
fdata << "Second line" << endl;
fdata.close();
return = 0;
}
Я попытался заменить << endl
на << "\n"
и изменить команду ofstream вроде там показано, но ничего не сработало; вывод всегда был First lineSecond line
вместо First line
и Second line
в последующих строках.
Кроме того, код отлично работает, когда я печатаю вывод в видео с помощью команды cout
или когда я компилирую и запускаю его на cygwin.
Это проблема подсистемы Windows для Linux или я упускаю что-то важное?
Как вы изучаете файл? Не используйте никакие программы Windows, которые понимают только новые строки Windows, например Блокнот.
Является ли это случаем создания файла в одной системе и просмотра его в другой, которая не распознает другой CRLF, дубликат stackoverflow.com/questions/9705923/c-ofstream-line-break
@francesco это сработало, большое спасибо! Я просмотрел вопрос, который вы связали, но было бы здорово, если бы вы могли ответить, объясняя, почему «\ r» и «\ r \ n» работают в этом конкретном случае.
@newbie Я понимаю вашу точку зрения, но почему тогда открытие в Блокноте того же файла .dat, скомпилированного и запущенного сначала Cygwin, а затем Windows bash, не дает того же результата?
Блокнот @Francesco не распознает символ конца строки LF в Linux, ему нужен «/ r», где, как и в Linux, символ FOL распознается и отображается правильно.
По комментарию.
Try substituting << endl with \r\n
Это связано с различиями в окончаниях строк linux и windows. В Windows вам нужно добавить возврат каретки, а затем символ новой строки. В то время как в Linux нет необходимости в возврате каретки.
Проблема возникает из-за того, что вы компилируете для Linux, поэтому std::endl
помещает строку версии Linux в конец, но вы пытаетесь просмотреть вывод в Windows.
Возможно, это связано с stackoverflow.com/q/1552749/8769985 Попробуйте заменить
<< endl
на\r\n