QT從入門到入土(四)——文件的讀寫操作


 引言

文件的讀寫是很多應用程序具有的功能,甚至某些應用程序就是圍繞着某一種格式文件的處理而開發的,所以文件讀寫是應用程序開發的一個基本功能。

Qt 提供了兩種讀寫純文本文件的基本方法:

  1. QFile 類的 IODevice 讀寫功能直接進行讀寫
  2. 利用 QFile QTextStream 結合起來,用流(Stream)的方法進行文件讀寫。

一、文件讀操作

(1)使用QFile類

Qt封裝了QFile類,方便我們對文件進行操作,可以按照如下的步驟進行:

  • 使用QFile加載文件對象
  • 打開文件 file.open(打開方式)
  • 操作文件
  • 關閉文件 file.close()

實例:點擊讀寫文件按鈕,讀取文件內容到textEdit中

1️⃣設置ui界面

 2️⃣在widget.cpp中編輯代碼(QFileDialog類是打開文件)

   //點擊選取文件按鈕,彈出文件對話框
    connect(ui->pushButton,&QPushButton::clicked,[=](){
    QString path=  QFileDialog::getOpenFileName(this,"打開文件","C:/Users/WFD/Desktop");
   //將路徑顯示在lineEdit中
   ui->lineEdit->setText(path);

      //讀取文件內容,放入textEdit中
      QFile file(path);//參數就是文件的路徑
      //設置打開方式
      file.open(QIODevice::ReadOnly);
      //用QByteArray類去接收讀取的信息
      QByteArray array=file.readAll();
      //將讀取到的數據放入textEdit中
      ui->textEdit->setText(array);
      //關閉文件對象
      file.close();

注意:在設置打開方式的時候

QFile::open() 函數打開文件時需要傳遞 QIODevice::OpenModeFlag 枚舉類型的參數,決定文件以什么方式打開,QIODevice::OpenModeFlag 類型的主要取值如下:

QIODevice::ReadOnly  //以只讀方式打開文件,用於載入文件。
QIODevice::WriteOnly  //以只寫方式打開文件,用於保存文件。
QIODevice::ReadWrite //以讀寫方式打開。
QIODevice::Append  //以添加模式打開,新寫入文件的數據添加到文件尾部。
QIODevice::Truncate //以截取方式打開文件,文件原有的內容全部被刪除。
QIODevice::Text       //以文本方式打開文件,讀取時“\n”被自動翻譯為換行符,寫入時字符串結束符會自動翻譯為系統平台的編碼,如 Windows 平台下是“\r\n”。

這些取值可以組合,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只讀和文本方式打開文件。

 注意:在操作文件時

用只讀方式打開一個文本文件,然后用readAll()方法將文件內容一次全部讀取出來,返回值是字節數組QByteArray。QByteArray用來存放二進制數據,如果想要看文字內容需要轉換成QString。(有時候系統會自動轉換)

我們也可以使用readLine方法一次讀取一行,然后每次對一行文字進行操作:(用file.atEnd判斷是否讀到最后一行)

       QByteArray array;
      while(!file.atEnd())
      {
           array+=file.readLine();//+=疊加讀過的行
      }

(2)使用QTextStream類

如果操作的是文本文件,Qt還專門封裝了一個處理文本流的類,我們可以用它來讀取文本內容

    //點擊選取文件按鈕,彈出文件對話框
    connect(ui->pushButton,&QPushButton::clicked,[=](){
      QString path=  QFileDialog::getOpenFileName(this,"打開文件","C:/Users/WFD/Desktop");
      //將路徑放在lineEdit中
      ui->lineEdit->setText(path);
      //讀取文件內容,放入textEdit中
      QFile file(path);//參數就是文件的路徑
      //設置打開方式
      file.open(QIODevice::ReadOnly);
      //用QTextStream類去讀取文本信息
     QTextStream QS(&file); //用QString類去接收讀取的信息
     QString array=QS.readAll();       //將讀取到的數據放入textEdit中
      ui->textEdit->setText(array);
      //關閉文件對象
      file.close();

二,文件寫操作

(1)使用QFile類

使用QFile同樣可以對文件進行寫操作:

(2)使用QTextStream類

 QTextStream類對操作符進行了重載,我們可以通過 << 操作符將字符串流入文本文件:

 三,文件信息讀取

除了對文件的讀寫操作,Qt還封裝了QFileInfo類幫助我們獲取文件的元數據,比如文件大小、后綴名、創建時間、最后修改時間等等:

拓展:

  • 各編碼轉換
QString -> QByteArray      QString.toUtf8();

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

std::string -> char *        string.date();
  • 常用靜態函數
QFileDialog::getOpenFileName()    //獲取指定文件路徑名返回QString
QFileDialog::getExistingDirectory()  //獲取指定路徑返回QString
QFileDialog::getSaveFileName()    //獲取指定保存路徑名返回QString

QT配置ini文件的建立,讀取,寫入操作

1 ini文件介紹

.ini 文件是Initialization File的縮寫,即初始化文件。

除了windows現在很多其他操作系統下面的應用軟件也有.ini文件,用來配置應用軟件以實現不同用戶的要求。一般不用直接編輯這些.ini文件,應用程序的圖形界面即可操作以實現相同的功能。它可以用來存放軟件信息,注冊表信息等。

2 ini文件格式

INI文件由節、鍵、值組成。 

節

  [section] 

參數(鍵=值)

name=value

下面是一個ini文件的例子

[Section1 Name]   

KeyName1=value1   

KeyName2=value2   

...   

[Section2 Name]   

KeyName21=value21   

KeyName22=value22   

其中:[Section1 Name]用來表示一個段落。因為INI文件可能是項目中共用的,所以使用[Section Name]段名來區分不同用途的參數區。例如:[Section1 Name]表示傳感器靈敏度參數區;[Section2 Name]表示測量通道參數區等等。

注解:使用分號表示(;)。在分號后面的文字,直到該行結尾都全部為注解。

3 Qt寫ini文件

#include <QApplication>
#include <QSettings>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //Qt中使用QSettings類讀寫ini文件
    //QSettings構造函數的第一個參數是ini文件的路徑,第二個參數表示針對ini文件,第三個參數可以缺省
    QSettings *configIniWrite = new QSettings("hahaya.ini", QSettings::IniFormat);
    //向ini文件中寫入內容,setValue函數的兩個參數是鍵值對
    //向ini文件的第一個節寫入內容,ip節下的第一個參數
    configIniWrite->setValue("/ip/first", "192.168.0.1");
    //向ini文件的第一個節寫入內容,ip節下的第二個參數
    configIniWrite->setValue("ip/second", "127.0.0.1");
    //向ini文件的第二個節寫入內容,port節下的第一個參數
    configIniWrite->setValue("port/open", "2222");
    //寫入完成后刪除指針
    delete configIniWrite;
    return a.exec();
}

運行程序后,打開程序目錄下的hahaya.ini文件,結果如下圖所示:

 4 Qt讀ini文件

#include <QApplication>
#include <QSettings>
#include<QDebug>
int main(int argc, char *argv[])
{
      QApplication a(argc, argv);
      QSettings *configIniRead = new QSettings("hahaya.ini", QSettings::IniFormat);
      //將讀取到的ini文件保存在QString中,先取值,然后通過toString()函數轉換成QString類型
      QString ipResult = configIniRead->value("/ip/second").toString();
      QString portResult = configIniRead->value("/port/open").toString();
      //打印得到的結果
      qDebug() << ipResult;
      qDebug() << portResult;
      //讀入入完成后刪除指針
      delete configIniRead;
      return a.exec();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM