Qt5:如何read/write本地文件系统中的文件
Qt5: How to read/write the file in local file system
我是 Qt.In 我的应用程序的新手,我想按一个按钮,它会出现一个 QFileDialog 让我 select 文件系统中的文件。那么该怎么做?
在那之后,这是我的问题,我不知道 Qt 中的哪个 API 就像 POSIX 中的 "open" 一样工作?我想如果我能以正确的方式打开文件,这个 API 将 return 给我一个文件描述符,我可以 read/write 这个文件就像 posix 中打开的那样。
我阅读了一些文档并找到了一些 类 例如 QFile QDataStream 但我不知道它们是否正是我想要的。
这些正是您要找的。
特别是,您可以使用 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)
然后使用QFile and QDataStream or QTextStream阅读内容。
大多数情况下,您会使用 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.
只读:
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 会代替您解决多少零件和每个零件字节。
我是 Qt.In 我的应用程序的新手,我想按一个按钮,它会出现一个 QFileDialog 让我 select 文件系统中的文件。那么该怎么做?
在那之后,这是我的问题,我不知道 Qt 中的哪个 API 就像 POSIX 中的 "open" 一样工作?我想如果我能以正确的方式打开文件,这个 API 将 return 给我一个文件描述符,我可以 read/write 这个文件就像 posix 中打开的那样。
我阅读了一些文档并找到了一些 类 例如 QFile QDataStream 但我不知道它们是否正是我想要的。
这些正是您要找的。 特别是,您可以使用 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)
然后使用QFile and QDataStream or QTextStream阅读内容。
大多数情况下,您会使用 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.
只读:
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 会代替您解决多少零件和每个零件字节。