1.文本檔案
文本檔案是指以純文字格式存儲的檔案,例如用 Qt Creator 編寫的 C++ 程式的頭檔案(上檔案)和源程式檔案(.cpp 檔案)。HTML 和 XML 檔案也是純文字檔案,隻是其讀取之後需要對内容進行解析之後再顯示。
Qt 提供了兩種讀寫純文字檔案的基本方法:
- 用 QFile 類的 IODevice 讀寫功能直接進行讀寫
- 利用 QFile 和 QTextStream 結合起來,用流(Stream)的方法進行檔案讀寫。
2.QFile讀寫文本檔案
QFile::open() 函數打開檔案時需要傳遞
QIODevice::OpenModeFlag
枚舉類型的參數,決定檔案以什麼方式打開,QIODevice::OpenModeFlag 類型的主要取值如下:
- QIODevice::ReadOnly:以隻讀方式打開檔案,用于載入檔案。
- QIODevice::WriteOnly:以隻寫方式打開檔案,用于儲存檔案。
- QIODevice::ReadWrite:以讀寫方式打開。
- QIODevice::Append:以添加模式打開,新寫入檔案的資料添加到檔案尾部。
- QIODevice::Truncate:以截取方式打開檔案,檔案原有的内容全部被删除。
- QIODevice::Text:以文本方式打開檔案,讀取時“\n”被自動翻譯為換行符,寫入時字元串結束符會自動翻譯為系統平台的編碼,如 Windows 平台下是“\r\n”。
讀檔案顯示到QPlaintextEdit上
QString fileName = "test.txt";
QFile file(fileName);
//檔案不存在
if (!file.exists())
return false;
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
//設定QPlaintextEdit顯示結果
ui->plaintextEdit->setPlainText(file.readAll());
file.close();
QPlaintextEdit上寫檔案到本地
QString fileName = "save.txt";
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return false;
//整個内容作為字元串
QString str=ui->palinTextEdit->toPlainText();
//轉換為位元組數組
QByteArray strBytes=str.toUtf8();
//寫入檔案
file.write(strBytes,strBytes.length());
//關閉
file.close();
3.QFile和QTextStream結合讀寫文本檔案
QTextStream 可以與 QFile、QTemporaryFile、QBuffer、QTcpSocket 和 QUdpSocket 等 IO 裝置類結合使用。
讀取文本檔案
QString fileName = "test.txt";
QFile file(fileName);
if (!file.exists()) //檔案不存在
return false;
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
//用文本流讀取檔案
QTextStream stream(&file);
//設定内容
ui->plainTextEdit->setPlainText(stream.readAll());
//關閉檔案
file.close();
寫文本檔案
QString fileName = "save.txt";
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return false;
//用文本流讀取檔案
QTextStream stream(&file);
//轉換為字元串
QString str=ui->plainTextEdit->toPlainText();
//寫入文本流
stream<<str;
//關閉檔案
file.close();
解決中文亂碼的問題
在使用 QTextStream 讀寫有中文内容的文本檔案時,為了能正确識别 Unicode 碼,需要調用 setAutoDetectUnicode(true),設定 QTextStream 可以自動識别 Unicode 碼,如果不做此設定,讀取檔案的中文将是亂碼,無法正常顯示。
為解決 Unicode 的識别問題,可以在應用程式中做全局的設定,使得應用程式支援 Unicode。方法是在 main() 函數中使用 QTextCodec 類進行編碼設定。
//解決漢字亂碼問題
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QApplication a(argc, argv);
MainWindow w;
w.show();