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 world\r\n
\r\n
我无法为最后 \r\n
行获取空字符串。我该如何解决?
我认为换行符会被删除。请参阅 QTextStream 的 Qt 文档。
您必须使用 readAll() 或如果换行符为空,请自行添加“\n\r”。
根据 http://doc.qt.io/qt-4.8/qtextstream.html#readLine \r\n 总是被修剪。所以你会在每一行阅读中错过它们。你可以:
a) 在使用 readLine()
后向读取的字符串添加行终止符
b) 使用 QFiles.readLine()
读入不接触读取字节的 QByteArray
:
while (!f.atEnd()) {
QByteArray line = f.readLine();
process_line(line);
}
c) 使用另一种方法读取文件,例如std::istream
。请参阅 http://www.cplusplus.com/reference/istream/istream/getline/ 以获得等效的 getline
。
我正在使用 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 world\r\n
\r\n
我无法为最后 \r\n
行获取空字符串。我该如何解决?
我认为换行符会被删除。请参阅 QTextStream 的 Qt 文档。
您必须使用 readAll() 或如果换行符为空,请自行添加“\n\r”。
根据 http://doc.qt.io/qt-4.8/qtextstream.html#readLine \r\n 总是被修剪。所以你会在每一行阅读中错过它们。你可以:
a) 在使用 readLine()
b) 使用 QFiles.readLine()
读入不接触读取字节的 QByteArray
:
while (!f.atEnd()) {
QByteArray line = f.readLine();
process_line(line);
}
c) 使用另一种方法读取文件,例如std::istream
。请参阅 http://www.cplusplus.com/reference/istream/istream/getline/ 以获得等效的 getline
。