是否有任何东西可以为任何平台获得正确的行尾符号?我的意思是,如果我想将EOL写入文件,我可以使用\n
用于Windows和Unix,但是还有\r\n
,如果我要搜索二进制数据,这将是很重要的。
所以,我需要在C#中使用类似Environment.NewLine
的内容,它应该是某个类而不是#ifdef Q_OS_WIN32...
的技巧。
用例是从QTextStream
读取所有数据并将其拆分为新行。无论如何,如果QTextStream
或QString::split
足够聪明,可以在任何平台上正确处理\n
,我想知道我问过的事情。
答案 0 :(得分:2)
尝试
QString::split(QRegularExpression{R"-((\r\n?|\n))-"})
这使用C ++ 11原始字符串文字来创建一个匹配所有三种可能性的正则表达式:
如果你不能使用C ++ 11,则必须手动转义正则表达式:
"(\\r\\n?|\\n)"
这应该可以解决问题。
答案 1 :(得分:1)
在文本模式下编写文件时,应将“\ n”字符重新解释为适合该系统的任何内容。对于Windows,这意味着CRLF(回车,换行),在Unix上,它只是LF,而Macintosh标准本身就是CR。
当你正在阅读时,准备好在这些字符中的任何一个字符处结束一行,但如果你找到回车符,请检查它后面是否有换行符,如果有,请考虑它的一部分同一条线。
答案 2 :(得分:0)
您可以尝试使用std :: endl
答案 3 :(得分:0)
我使用以下代码:
const QChar newline(QChar('\n'));
const QChar cr('\r');
#ifdef __linux__
const QChar eol = newline);
#elif _WIN32
const QString eol = QString(cr) + QString(newline);
#else
const QChar eol = cr;
#endif
我没有测试过else分支,因为我在非Linux或Windows(例如Mac)系统上所做的工作很少,所以必须测试一下自己。
Linux和Windows分支对我来说很好,可以将字符串在Windows和Linux上拆分为行。