QT從入門到入土(三)——檔案的讀寫操作

唯有自己強大發表於2021-07-17

 引言

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

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();
}

 

相關文章