簡體   English   中英

Qt5:如何在本地文件系統中讀取/寫入文件

[英]Qt5: How to read/write the file in local file system

我是Qt的新手。在我的應用程序中,我想按一個按鈕,它將出現QFileDialog,讓我選擇文件系統中的文件。那么該怎么做?

之后,這就是我的問題,我不知道Qt中的哪個API就像POSIX中的“打開”一樣工作? 我認為,如果我可以以正確的方式打開文件,則此API將返回一個文件描述符,並且可以像posix中的open一樣讀寫該文件。

我閱讀了一些文檔,發現了一些類,例如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)

然后使用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文檔非常完整,您只需要花點時間閱讀它們。 還有很多例子

僅閱讀:

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會代替您來解決多少零件和每個零件字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM