Hard-Soft News

Новости железа и софта

QTextStream, endl и вывод в файл

Если вы выводите текстовую информацию в файл Windows, то можете столкнуться с ситуацией, когда модификатор endl, выполняющий перевод строки, не делает того, что он должен делать. Это означает, что вместо последовательности \r\n, модификатор endl вставляет в конце строки только \n, чего для Windows недостаточно.  Решить эту проблему можно несколькими способами. Самый простой, использовать константу QIODevice::Text при открытии устройства, например:

QFile f("test.txt");
f.open(QIODevice::Text);
QTextStream s(&f);

В этом случае символ \n автоматически преобразуется в символы перехода на новую строку, используемые в данной системе. Если по каким-то причинам вы не хотите использовать константу QIODevice::Text, можете переопределить функцию endl() следующим образом:

QTextStream &endl(QTextStream &stream)
{
#ifdef Q_OS_WIN
    return stream << QLatin1String("\r\n") << flush;
#else
    return stream << QLatin1Char('\n') << flush;
#endif
}

В результате, endl под Windows всегда будет соответствовать последовательности \r\n. Таким же образом можно заставить endl выдавать любую другую последовательность, например, \0.

Комментировать