获取c++ /Qt中特定于平台的行结束符
Get platform specific end of line character in C++/Qt
是否有任何平台获得正确的行尾符号?我的意思是,如果我想将EOL写入文件,我可以在Windows和Unix上使用n
,但也有rn
,如果我要在二进制数据中进行搜索,这将是重要的。
所以,在c#中我需要Environment.NewLine
这样的东西,它应该是一些类,而不是#ifdef Q_OS_WIN32...
。
用例从QTextStream
读取所有数据并按新行拆分。无论如何,如果QTextStream
或QString::split
足够聪明,可以在任何平台上正确处理n
,我想知道我问的事情。
Try
QString::split(QRegularExpression{R"-((rn?|n))-"})
它使用c++ 11的原始字符串文字来创建一个匹配所有三种可能性的正则表达式:
- 仅限CR (Mac)
- CR +低频(赢得)
- 低频(Unix)
如果不能使用c++ 11,则必须手动转义正则表达式:
"(\r\n?|\n)"
当您在文本模式下编写文件时,应该将"n"字符重新解释为适合该系统的任何内容。对于Windows,这意味着CRLF(回车换行),在Unix上,它只是单独的LF,而Macintosh标准本身就是一个CR。
当你阅读时,准备好以这些字符中的任何一个结束一行,但是如果你发现一个回车,检查它后面是否有换行,如果有,认为它是同一行的一部分。
我使用这段代码:
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上将字符串分割成行。
您可以尝试使用std::endl
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在这个代码结束循环中没有得到结束
- 试图对缓存进行跨步测试,但程序并没有结束
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为什么擦除方法会影响结束方法
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 删除映射和分割错误中的一个过去结束元素
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 在函数结束后使用指向变量的指针是否安全?
- C ++尝试并捕获未结束的程序
- 为什么我的程序在输入某个形状的面积的测量值后没有结束?
- 取消引用结束指针到数组类型的一个
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何基于平台在制作文件中制作if语句?
- 结束另一个线程中使用的对象的生存期
- 全局向量导致 C++ 程序结束时出现段错误
- 在 Linux 平台的 C++ 中动态加载 DLL
- 在QT中,我如何获得与平台无关的行结束方式