QFile 忽略最后一个换行符
QFile ignoring last newline
我正在使用Qt读取文件
std::vector<QString> text;
QFile f(file);
if (f.open(QFile::ReadWrite | QFile::Text) == false)
throw my_exception();
QTextStream in(&f);
QString line;
while(!in.atEnd()) {
line = in.readLine();
text.push_back(line);
}
f.close();
这种方法的问题是:我无法读取文件末尾的额外换行符。
假设我有以下文本文件
Hello worldrn
rn
我无法获取最后 rn
行的空字符串。我该如何解决这个问题?
根据 http://doc.qt.io/qt-4.8/qtextstream.html#readLine \r 总是被修剪。因此,您将在每一行阅读中都错过它们。您可以:
a) 使用readLine()
后将行终止符添加到读取字符串
b) 使用QFiles.readLine()
读取不接触读取字节的QByteArray
:
while (!f.atEnd()) {
QByteArray line = f.readLine();
process_line(line);
}
c) 使用另一种方法读取文件,例如 std::istream
.有关等效getline
,请参阅 http://www.cplusplus.com/reference/istream/istream/getline/。
我认为换行符将被剥离。请参阅 QTextStream 的 Qt 文档。
您必须使用 readAll() 或者如果换行符为空,请自行添加 '\r'。
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- 一次读取一个字符的文件,直到使用 read(2) 和 write(2) 换行符
- 如果在循环中给cin一个意外的输入,则会自动输入C++换行符作为输入
- 编写一个简单的函数,其工作方式与"std::cout"类似,但在末尾添加换行符
- 编写一个C++ pgm 以从文件"input.txt"读取,每当遇到句点时插入换行符并将修改的内容写入"output.txt"
- 你能定制一个输入的换行符(C++)吗
- C++清除输入缓冲区(最后没有换行符)
- 当使用字符串流解析字符串时,它会提取一个换行符
- 在 std::string 中每设置一个字母量添加一个换行符
- 当子字符串只是一个换行符时,string.find(substring) 函数返回什么
- 为什么Qt Creator在cout.flush()调用后添加一个换行符
- c++如何在CURLOPT_中写入一个换行符
- QPushButton工具提示插入一个换行符而不需要我指定它
- 是否可以创建一个宏,将换行符替换为分号
- QFile 忽略最后一个换行符
- 为什么我的c++程序要打印一个额外的换行符?