【问题标题】:Qt5: How to read/write the file in local file systemQt5:如何在本地文件系统中读/写文件
【发布时间】:2015-01-20 10:19:44
【问题描述】:

我是 Qt 新手。在我的应用程序中,我想按下一个按钮,它会出现一个 QFileDialog 让我选择文件系统中的文件。那么该怎么做呢?

在那之后,这是我的问题,我不知道 Qt 中的哪个 API 像 POSIX 中的“open”一样工作?我想如果我能以正确的方式打开文件,这个 API 会返回一个文件描述符,我可以像 posix 中的 open 一样读/写这个文件。

我阅读了一些文档并找到了一些类,例如 QFile QDataStream 但我不知道它们是否正是我想要的。

【问题讨论】:

  • @alediaferia 你说的正是我想要的。谢谢你的帮助

标签: c++ qt qt5


【解决方案1】:

这些正是您要寻找的。 特别是,您可以使用QFileDialog 的一些静态方法来获取对您要打开的文件的引用,例如:

static QString  getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)

然后使用QFileQDataStreamQTextStream 读取内容。

大多数时候你会使用 QDataStream 来读取二进制数据,如下所示:

QFile f(fileName);
if (f.open(QIODevice::ReadOnly)) {
    QDataStream stream(&f);
    int data;
    stream >> data;
}

否则,您可以使用 QTextStream 读取纯文本,如下所示:

QTextStream stream(&f);
QString line;
do {
    line = stream.readLine();
    /* do something with the line */
} while (!line.isNull());

Qt 文档非常完整,您只需花时间阅读它们。还有很多examples

【讨论】:

    【解决方案2】:

    只读:

    QString fileName = QFileDialog::getOpenFileName(this,
        tr("Open file"), "", tr("all Files ()"));
    
    QFile file(fileName);
    
    if(file.open(QIODevice::ReadOnly)){
    QByteArray arr = file.readAll();
    file.close();
    }
    

    只写:

    QString fileName = QFileDialog::getOpenFileName(this,
        tr("Open file"), "", tr("all Files ()"));
    
    QFile file(fileName);
    
    if(file.open(QIODevice::WriteOnly)){
    file.write(QBtyeArray("Heelo World"));
    file.close();
    }
    

    读写:

    QString fileName = QFileDialog::getOpenFileName(this,
        tr("Open file"), "", tr("all Files ()"));
    
    QFile file(fileName);
    
    if(file.open(QIODevice::ReadWrite)){
    QByteArray arr = file.readAll();
    arr += " From Earth";
    file.write(arr);
    file.close();
    }
    

    如果你使用QDatastream你不需要解决你之前写了多少部分,按照下面的代码,我总是使用这种方法;

    QBuffer buffer;
    buffer.open(QIODevice::WriteOnly);
    QDatastream out(&buffer);
    
    out << QString("Hello World QString");
    out << QByteArray("Hello World QByteArray");
    out << int(55);
    
    buffer.close();
    
    QFile file(fileName);
    if(file.open(QIIDevice::WriteOnly)){
    
    file.write(buffer.data());
    file.close();
    }
    

    并阅读此文件

    QFile file(fileName);
    if(file.open(QIIDevice::WriteOnly)){
    
    QDatastream in(&file);
    
    QString str;
    QByteArray arr;
    int integer;
    
    in >> str;
    in >> arr;
    in >> integer;
    
    file.close();
    
    }
    

    str 是“Hello World QString”;

    arr 是“Hello World QByteArray”;

    整数为 55;

    QDataStream 正在为您的零件文件添加额外的字节,如果您使用 QDataStream 读取它,QDataStream 会代替您解决多少零件和每个零件的字节数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 2018-01-28
      • 2018-11-20
      • 2010-12-21
      • 2017-06-08
      相关资源
      最近更新 更多