日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

QT5 文件读写操作

發(fā)布時(shí)間:2025/4/5 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT5 文件读写操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

QFile Class

1.read讀文件

  • 加載文件對(duì)象? QFile file("文件地址");
  • 打開加載的文件file.open(打開方式);
  • 操作文件
  • 關(guān)閉打開的文件file.colse();
void Widget::on_pushButton_clicked() {QFile file("L:/qtpro/_qtApp/text/t.txt");file.open(QIODevice::ReadOnly | QIODevice::Text);QByteArray t = file.readAll();ui->text_r->setText(QString(t));file.close(); }

2.wirte寫文件

  • 以純文本的形式讀取要保存文件到QString對(duì)象 //ui->text_e->toPlainText();
  • 創(chuàng)建QFile 對(duì)象保存文件
  • 打開QFile對(duì)象
  • 寫入文件操作
  • 關(guān)閉打開的文件;
void Widget::on_pushButton_2_clicked() {QString e = ui->text_e->toPlainText();QFile file("L:/qtpro/_qtApp/text/e.txt");file.open(QIODevice::WriteOnly | QIODevice::Text);file.write(e.toUtf8());file.close(); }

細(xì)節(jié)優(yōu)化處理

  • read文件添加讀取文件選擇項(xiàng) QFileDialog::getOpenFileName();
  • 打開文件是否成功的判斷;
  • 按行讀取文件,可控制讀取行數(shù)與每行字符數(shù);
  • write文件創(chuàng)建保存路徑QFileDialog::getSaveFileName(); 

void Widget::on_pushButton_clicked() {QFile file;QString f = QFileDialog::getOpenFileName(this, QString("選擇文件"), QString("/"),QString("TEXT(*.txt)"));file.setFileName(f);if(file.open(QIODevice::ReadOnly | QIODevice::Text)){QByteArray t ;while(!file.atEnd()){t += file.readLine();}ui->text_r->setText(QString(t));file.close();} }void Widget::on_pushButton_2_clicked() {QString e = ui->text_e->toPlainText();QFile file;file.setFileName(QFileDialog::getSaveFileName(this, QString("保存路徑"), QString("/"),QString("TEXT(*.txt)")));file.open(QIODevice::WriteOnly | QIODevice::Text);file.write(e.toUtf8());file.close(); }

各編碼轉(zhuǎn)換

QString -> QByteArray????? QString.toUtf8();

QByteArray -> std::string? QByteArray.toStdString();

std::string -> char *??????? string.date();

常用靜態(tài)函數(shù):

?

QFileDialog::getOpenFileName() ?? //獲取指定文件路徑名返回QString

QFileDialog::getExistingDirectory()? //獲取指定路徑返回QString

QFileDialog::getSaveFileName() ? ?//獲取指定保存路徑返回QString

輔助配合使用的類:

?

QFileInfo class

獲取文件信息;

QFileInfo類用于讀取文件的屬性信息QFile file(f);QFileInfo info(file);qDebug() << info.exists();qDebug() << info.isFile();qDebug() << info.isReadable();qDebug() << info.isWritable();qDebug() << info.created();qDebug() << info.lastRead();qDebug() << info.lastModified();qDebug() << info.path();qDebug() << info.fileName();qDebug() << info.suffix();qDebug() << info.size();

?

二、文本流與數(shù)據(jù)流

QT中將文件分為文本文件和數(shù)據(jù)文件,文本文件內(nèi)容是可讀的文本字符,數(shù)據(jù)文件的內(nèi)容是二進(jìn)制數(shù)據(jù)。

QFile直接支持文本文件和數(shù)據(jù)文件的操作,主要函數(shù)接口如下:

  • ????qint64?read( char *?data, qint64?maxSize) //數(shù)據(jù)流讀取
  • ????QByteArray?read( qint64?maxSize) //文本流方式讀取
  •  QByteArray?readAll() //文本流方式讀取
  •  QByteArray readLine()//文本流方式讀取
  • ????qint64?write(const char *?data, qint64?maxSize)
  • ????qint64?write(const QByteArray &?byteArray)

為了簡(jiǎn)化文本文件和數(shù)據(jù)文件的讀寫操作,QT提供了QTextStream和QDataStream輔助類。QTextStream可將寫入的數(shù)據(jù)全部轉(zhuǎn)換為可讀文本,QDataStream可將寫入的數(shù)據(jù)根據(jù)類型轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。

QTemporaryFile是QT中的臨時(shí)文件操作類,用來安全創(chuàng)建全局唯一的臨時(shí)文件,QTemporaryFile對(duì)象銷毀時(shí)對(duì)應(yīng)的臨時(shí)文件將被刪除,臨時(shí)文件的打開方式為QIODevice::ReadWrite,臨時(shí)文件常用于大數(shù)據(jù)傳遞或者進(jìn)程間通信場(chǎng)合。

?

QTemporaryFile tempFile; if( tempFile.open() ) { tempFile.write("D.T.Software");tempFile.close(); }

?

QDataStream Class

數(shù)據(jù)流操作文件:

創(chuàng)建流對(duì)象 QDataStream date;

int a= xxxx;

string b = "xxxxxxxxx" ;

將數(shù)據(jù)存在流中 date >> a >> b;

int aa;

string bb;

從流中取出數(shù)據(jù) date << aa << bb;

QDataStream在不同的QT版本中數(shù)據(jù)流文件格式可能是不同的,如果數(shù)據(jù)流文件需要在不同版本的QT程序間傳遞時(shí)需要考慮版本問題。

void setVersion(int v)

int version() const

QTextStream Class

文本方式操作文件:

創(chuàng)建流對(duì)象?QTextStream date;

date.setCodec();支持對(duì)文件讀取編碼設(shè)置(有效解決亂碼問題)

QBuffer

?QBuffer類為QByteArray提供QIODevice接口。

目前先理解為一個(gè)創(chuàng)建一個(gè)緩存文件;

QT中預(yù)定義了緩沖區(qū)的類QBuffer,可以將緩沖區(qū)看成一種特殊的IO設(shè)備,文件流輔助類可以直接用于操作緩沖區(qū)。QBuffer緩沖區(qū)寫入和讀取的數(shù)據(jù)必須是同一種數(shù)據(jù)類型,不能混合多種數(shù)據(jù)類型。

????QBuffer的使用場(chǎng)合:

????A、線程間不同類型的數(shù)據(jù)傳遞

????B、緩存外部設(shè)備中的數(shù)據(jù)返回

????C、數(shù)據(jù)讀取速度小于寫入速度

總結(jié):

讀寫操作主要方法有read();readAll();readline(),write();

附錄:

目錄操作

1、QDir

????QT中提供了目錄操作類QDir,QDir功能如下:

????A、目錄分隔符統(tǒng)一使用’/’

????B、能夠?qū)δ夸涍M(jìn)行任意操作(創(chuàng)建、刪除、重命名)

????C、能夠獲取指定目錄中的所有條目(文件和文件夾)

????D、能夠使用過濾字符串獲取指定條目

????E、能夠獲取系統(tǒng)中的所有根目錄

????QDir使用方法如下:

?

QDir dir;QString path("../qt/test");if(!dir.exists()){dir.mkdir(path);}else{dir.cd(path);QStringList list = dir.entryList();for(int i = 0; i < list.count(); i++){qDebug() << list[i];}}//計(jì)算文件大小 unsigned int FileSize(QString path) {QFileInfo info(path);unsigned int ret = 0;if(info.isFile()){ret = info.size();}else if(info.isDir()){QDir dir(path);QFileInfoList list = dir.entryInfoList();for(int i = 0; i < list.count(); i++){if((list[i].fileName() != ".") && (list[i].fileName() != "..")){ret += FileSize(list[i].absoluteFilePath());}}}return ret; }

2、QFileSystemWatcher

QT中預(yù)定義了用于監(jiān)控文件和目錄變化的類QFileSystemWatcher,

QFileSystemWatcher主要功能如下:

????A、能夠監(jiān)控特定目錄和文件的狀態(tài)

????B、能夠同時(shí)對(duì)多個(gè)文件和目錄進(jìn)行監(jiān)控

????C、當(dāng)目錄或文件發(fā)生改變時(shí)觸發(fā)信號(hào)

????D、通過信號(hào)與槽的機(jī)制捕捉信號(hào)并做出響應(yīng)

????通常要使用QFileSystemWatcher需要自定義文件監(jiān)視類。

總結(jié)

以上是生活随笔為你收集整理的QT5 文件读写操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。