Qt5:如何在本地文件系统中读/写文件

时间:2015-01-20 10:19:44

标签: c++ qt qt5

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

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

我阅读了一些文档,发现了一些类,比如QFile QDataStream,但我不知道它们是不是我想要的。

2 个答案:

答案 0 :(得分:0)

这些正是您正在寻找的。 特别是,您可以使用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

答案 1 :(得分:0)

只读:

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 is&#34; Hello World QString&#34 ;;

arr is&#34; Hello World QByteArray&#34 ;;

整数是55;

QDataStream为您的部件添加额外的字节文件,如果您使用QDataStream读取它,QDataStream将解决您有多少部分和每个部分字节而不是您。