【问题标题】:Reading multiple files with QFile使用 QFile 读取多个文件
【发布时间】:2021-05-05 18:33:11
【问题描述】:

我想读取多个文件。我在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;

【问题讨论】:

    标签: c++ qt qt5 multiple-file-upload


    【解决方案1】:

    我了解到您的文件夹中有一些文件,并且您想阅读文件列表(您通过 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"
    

    【讨论】:

    • 谢谢。它有效并解决了我的问题。
    • 嗨。我想在选择后进行一些操作。但我的代码只为一个文件执行此操作。我应该如何为它写一个循环?做一些事情,为每个文件我选择
    • 你在while循环中做。它将为每个文件完成。
    • @Pat.ANDRIA 如果我只想阅读几个 QFiles,我可以不使用循环来完成吗?如何引用多个 QFile?
    【解决方案2】:

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

    这是一个方便的静态函数,将返回用户选择的一个或多个现有文件。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多