在Qt中逐行读取文本文件

57

我该如何在Qt中逐行读取文本文件?

我正在寻找与以下代码等效的Qt代码:

std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
   ...
}
5个回答

114

使用以下代码:

QFile inputFile(fileName);
if (inputFile.open(QIODevice::ReadOnly))
{
   QTextStream in(&inputFile);
   while (!in.atEnd())
   {
      QString line = in.readLine();
      ...
   }
   inputFile.close();
}

2
模式不应该是(QIODevice::ReadOnly | QIODevice::Text)吗? - Alexander Malakhov
3
QIODevice::Text 是默认设置。 - sashoalm
@Sergio:只是出于好奇,如果输入文件包含逗号分隔的字符串,那么如何解析? - Chinmoy
@Chinmoy 使用 QString 的 split() 方法。 - Vern Jensen
@sashoalm 默认情况下是怎样的?“默认情况下,QFile假定为二进制文件,即它不对文件中存储的字节执行任何转换。”- Qt文档... - mip

8
这段代码可能会更简单一些:
QFile inputFile(QString("/path/to/file"));
inputFile.open(QIODevice::ReadOnly);
if (!inputFile.isOpen())
    return;

QTextStream stream(&inputFile);
for (QString line = stream.readLine();
     !line.isNull();
     line = stream.readLine()) {
    /* process information */
};

1
只有代码片段的答案并不是很有帮助。 - Plog
3
你的代码片段很有帮助。(!line.isNull())是我所需要的。 - Harvey

4

自从Qt 5.5版本,您可以使用 QTextStream::readLineInto。它的行为类似于 std::getline,并且可能比QTextStream :: readLine 更快,因为它可以重用字符串:

QIODevice* device;
QTextStream in(&device);

QString line;
while (in.readLineInto(&line)) {
  // ...
}

0

或者像这样,从文件中读取

包含的库:

#include "QFile"
#include "QDir"

代码:

QFile file;
file.setFileName("text.txt");
QDir::setCurrent("C:/Users/USER_NAME/Documents/QTCreatorWorkspace/untitled1");
QTextStream data(&file);

if(file.open(QIODevice::ReadOnly)){
    ui->plainTextEdit->insertPlainText(file.readAll());
    file.close();
}
else{
    //Error statement
}

而对于将内容写入文件:

代码如下:

QFile file;
file.setFileName("text.txt");
QDir::setCurrent("C:/Users/USER_NAME/Documents/QTCreatorWorkspace/untitled1");
QTextStream data(&file);

if(file.open(QIODevice::ReadWrite)){
    data << ui->plainTextEdit->toPlainText();
    file.close();
}

0
这是我的代码示例。我将使用readLine()从第一行到第三行读取文本,然后将其存储到数组变量中,并使用for循环打印到textfield中:
QFile file("file.txt");

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    QString line[3] = in.readLine();
    for(int i=0; i<3; i++)
    {
        ui->textEdit->append(line[i]);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接