【发布时间】:2011-07-23 15:08:19
【问题描述】:
如何在 Qt 中逐行读取文本文件?
我正在寻找与以下内容等效的 Qt:
std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
...
}
【问题讨论】:
如何在 Qt 中逐行读取文本文件?
我正在寻找与以下内容等效的 Qt:
std::ifstream infile;
std::string line;
while (std::getline(infile, line))
{
...
}
【问题讨论】:
使用此代码:
QFile inputFile(fileName);
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while (!in.atEnd())
{
QString line = in.readLine();
...
}
inputFile.close();
}
【讨论】:
(QIODevice::ReadOnly | QIODevice::Text) 吗?
这段代码可能会简单一点:
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 */
};
【讨论】:
(!line.isNull()) 是我需要的。
从 Qt 5.5 开始,您可以使用QTextStream::readLineInto。它的行为类似于std::getline,可能比QTextStream::readLine 更快,因为它重用了字符串:
QIODevice* device;
QTextStream in(&device);
QString line;
while (in.readLineInto(&line)) {
// ...
}
【讨论】:
这是我的代码中的示例。所以我将使用 readLine() 从第一行到第三行读取文本,然后存储到数组变量并使用 for-loop 打印到文本字段中:
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]);
}
【讨论】:
或者类似的东西,对于 read from file:
包含的库:
#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
}
对于 write 到文件: 守则:
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();
}
【讨论】: