QT中的文件IO
- 一、有關文件IO的類
- 二、步驟
- 1、定義QFile的對象,與要讀寫的文件綁定在一起
- 2、打開文件
- 3、讀寫文件
- 1)讀取文件
- 2)寫入文件
- 4、關閉文件
- 5、示例代碼:
- 三、QString和QByteArray之間的轉換
- 1、方法
- 2、示例代碼:
- 四、QFileInfo類 --》獲取文件屬性
- 1、方法
- 五、QDir類 --》QT中的目錄操作
- 1、方法
- 2、示例代碼(與QFileInfo配合使用)
一、有關文件IO的類
QFile 表示某個文件對象
QDir 表示某個目錄對象
QFileInfo 存放文件的屬性信息(文件大小,文件類型等等)
二、步驟
1、定義QFile的對象,與要讀寫的文件綁定在一起
QFile::QFile(const QString &name)
參數:name --》需要讀寫的文件路徑名
2、打開文件
bool QIODevice::open(OpenMode mode)返回值:成功 true 失敗 false參數:QIODevice::ReadOnly //只讀QIODevice::WriteOnly //只寫QIODevice::ReadWrite //只讀寫
新建文件 open(QIODevice::WriteOnly|QIODevice::Truncate)
3、讀寫文件
1)讀取文件
qint64 QIODevice::read(char *data, qint64 maxSize)返回值:成功 返回讀取的字節數 失敗 -1參數:data --》保存讀取的數據maxSize --》讀取多少字節的數據QByteArray QIODevice::read(qint64 maxSize)返回值:讀取的數據參數:maxSize --》讀取多少字節的數據
QByteArray QIODevice::readAll() //一次性讀取整個文件內容,適合讀取小文件
qint64 QIODevice::readLine(char *data, qint64 maxSize) //一次最多讀取一行文件數據
類比:fgets
2)寫入文件
qint64 QIODevice::write(const char *data, qint64 maxSize)
qint64 QIODevice::write(const QByteArray &byteArray)
4、關閉文件
void QIODevice::close()
5、示例代碼:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
// ui->textBrowser->setText("你好,世界aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}MainWindow::~MainWindow()
{delete ui;
}// pushbutton 右鍵轉到槽
void MainWindow::on_pushButton_clicked()
{QString pathName = QFileDialog::getOpenFileName(this);// 創建文件對象QFile myFile(pathName);// 打開文件bool ret = myFile.open(QIODevice::ReadWrite);if (!ret){QMessageBox::warning(this, "警告", "文件打開失敗");return;}// 讀取文件內容// char buf[100]={0};// myfile.read(buf,100); //讀取100個字節存放到buf中// qDebug()<<"讀取的內容: "<<buf;// QByteArray buf=myfile.read(100); //讀取100個字節,以返回值的形式返回// QByteArray叫做字節數組,里面的內容是16進制的形式顯示// 把QByteArray轉換成QString QString(const QByteArray &ba)// QString str(buf);// qDebug()<<"讀取的內容: "<<str;// 一次性讀取整個文件(視頻幾十M以上的無法讀取)QByteArray buf=myFile.readAll();//在文本瀏覽框中顯示ui->textBrowser->setText(buf);//關閉文件myFile.close();
}
三、QString和QByteArray之間的轉換
1、方法
QByteArray --》QString 自動轉換,調用了構造函數
QString --》QByteArray 必須使用函數轉換 QByteArray QString::toUtf8()
char * --》QString 自動轉換,調用了構造函數
QString --》char * 調用QString中的data()方法
2、示例代碼:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QByteArray>
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 1、QByteArray --》QString 自動轉換(調用了構造函數)QByteArray byteArry("你好,世界");QString str1 = byteArry; // 跟QString str1(byteArry)等價的qDebug()<<"str1:"<<str1; // str1: "你好,世界"// 2、QString --》QByteArray 必須使用函數轉換 QByteArray QString::toUtf8()QString str2="helloworld";QByteArray array2=str2.toUtf8();qDebug()<<"array2:"<<array2; // array2: "helloworld"// 3、char * --》QString 自動轉換(調用了構造函數)char buf[10]="你好";QString str3=buf; //跟QString str3(buf)等價的qDebug()<<"str3:"<<str3; // str3: "你好"// 4、QString --》char * 調用QString中的data()方法QString str4="nihao";QChar *p=str4.data();qDebug() << "通過循環逐個輸出字符:";for (int i = 0; p[i] != '\0'; ++i){qDebug() << p[i];}
}MainWindow::~MainWindow()
{delete ui;
}
四、QFileInfo類 --》獲取文件屬性
1、方法
QFileInfo::QFileInfo(const QString &file)參數:file --》文件的路徑名
QString QFileInfo::filePath() const //獲取文件的路徑名
bool QFileInfo::isDir() const //判斷文件是否是目錄
qint64 QFileInfo::size() const //獲取文件大小
QString QFileInfo::suffix() const //獲取文件的后綴名
五、QDir類 --》QT中的目錄操作
1、方法
第一步:新建QDir的對象,跟某個目錄的路徑綁定一起
QDir::QDir(const QString &path = QString())參數:path --》要遍歷的目錄的路徑名
第二步:遍歷目錄,得到目錄的文件名
QStringList QDir::entryList() const返回值:字符串列表中存放了目錄中所有的文件名字
2、示例代碼(與QFileInfo配合使用)
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDir>
#include <QDebug>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}// 打開目錄
void MainWindow::on_pushButton_clicked()
{// 打開目錄對話框QString dirpath=QFileDialog::getExistingDirectory(this,"我的目錄");//qDebug()<<"選擇的目錄是: "<<dirpath;// 創建QDir的對象表示某個目錄QDir mydir(dirpath);// 遍歷目錄QStringList filelist=mydir.entryList();for(auto x:filelist)qDebug()<<"選擇的目錄中包含了: "<<x;// 獲取文件的屬性QFileInfo info("C:/Users/Administrator/Desktop/vm_share/筆記/1.txt");// 獲取文件大小qDebug()<<"文件大小是: "<<info.size();qDebug()<<"文件后綴名是: "<<info.suffix();}