使用 QFile 读取多个文件

Reading multiple files with QFile

我想读取多个文件。我在 QFile 中遇到错误,因为它一次只读取一个文件。

QStringList fileNames;
fileNames = QFileDialog::getOpenFileNames(this,
  tr("choose"),
  "up.sakla",
  tr("choosen(*.up)"));

if (fileNames.isEmpty())
  return;

QFile file(fileNames);
file.open(QIODevice::ReadOnly);
QDataStream in ( & file);
QString str;
qint32 a; in >> str >> a;

正如你在官方看到的那样here

This is a convenience static function that will return one or more existing files selected by the user.

另一方面,QFile 构造函数不接受 QStringList(doc)

你可以做的是遍历列表中的每个元素

for(auto x : fileNames)
{
    QFile file(x);
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);   
    QString str;
    qint32 a;
    in >> str >> a;
}

我了解到您的文件夹中有一些文件,并且您想阅读文件列表(您通过 QFileDialog 选择的文件)

完整代码如下:

#include <QApplication>
#include <QFileDialog>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
   
    QStringList fileNames;



    fileNames = QFileDialog::getOpenFileNames(nullptr, "choose", "up.sakla", "choosen(*.up)");

    for (auto xfile : fileNames)
    {
        QFile file (xfile);
        file.open(QIODevice::ReadOnly);
        QTextStream in(&file);
        QString str;
        while (!in.atEnd())
        {
           //read all the file content as a text
           str = in.readAll();
           qDebug() << str;
        }


    }

    return app.exec();
}

如果每个文件的内容如下:

  • 文件 1 内容
File1 11
  • 文件 2 内容
File1 12
  • 文件 3 内容
File1 13

程序的输出如下:

"File3 13\n \n"
"File1 11\n \n"
"File2 12\n \n"