關鍵詞:Qt中文件類型、
1. 文件類型
Qt中文件類型分為兩大類
1) 文本文件:文件內容是可讀的文本字符
2)數據文件:文件內容是直接的二進制數據QFile
直接支持文本文件和數據文件的讀寫
qint64 read(char* data, qint64 maxSize);
QByteArray read(qint64 maxSize);
qint64 write(const char* data, qint64 maxSize);
qint64 write(const QByteArray& byteArray);
思考:如何將一個浮點數據寫入文本文件和數據文件峻贮?
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
QFile file("/home/delphi/QT/IOFile/test.hex");
if( file.open(QIODevice::WriteOnly) ) // 以只寫的方式以及二進制的形式打開文件
{
QString dt = "D.T.Software";
double value = 3.14;
file.write(dt.toStdString().c_str()); // 將QString 轉換為 二進制數據
file.write(reinterpret_cast<char*>(&value), sizeof(value)); // 將 double* 轉化為 char*
file.close();
}
if( file.open(QIODevice::ReadOnly)) // 以只讀的方式以及二進制的形式打開文件
{
QString dt = "";
double value = 0;
dt = QString(file.read(12));
file.read(reinterpret_cast<char*>(&value), sizeof(value));
file.close();
qDebug() << dt;
qDebug() << value;
}
return a.exec();
}
2. 文本流和數據流
- Qt提供輔助類簡化了文本文件和數據文件的讀寫
1)QTextStream
:寫入的數據全部轉化為可讀文本
2)QDataStream
:寫入的數據根據類型轉化為二進制數據 - IO設備輔助類的使用方式
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>
void text_stream_test(QString f)
{
QFile file(f);
if( file.open(QIODevice::WriteOnly | QIODevice::Text) ) // 以只寫和文本形式打開文件
{
QTextStream out(&file); // 創(chuàng)建 QTextStream 輔助類
out << QString("D.T.Software") << endl; // 通過輔助類輸入字符串
out << QString("Result: ") << endl;
out << 5 << "*" << 6 << " = " << 5 * 6 <<endl; // 通過輔助類輸入表達式
file.close();
}
if( file.open(QIODevice::ReadOnly | QIODevice::Text)) // 以只寫和文本形式打開文件
{
QTextStream in(&file); // 創(chuàng)建 QTextStream 輔助類
while( !in.atEnd() )
{
QString line = in.readLine();
qDebug() << line;
}
file.close();
}
}
void data_stream_text(QString f)
{
QFile file(f);
if( file.open(QIODevice::WriteOnly) ) // 以只寫和二進制形式打開文件
{
QDataStream out(&file); // 創(chuàng)建 QDataStream 輔助類
out << QString("D.T.Software"); // 通過輔助類輸入字符串
out << QString("Result: ");
out << 3.14; // 通過輔助類輸入表達式
file.close();
}
if( file.open(QIODevice::ReadOnly)) // 以只寫和二進制形式打開文件
{
QDataStream in(&file); // 創(chuàng)建 QDataStream 輔助類
QString dt = "";
QString result = "";
double value = 0;
in >> dt;
in >> result;
in >> value;
file.close();
qDebug() << dt;
qDebug() << result;
qDebug() << value;
}
}
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
text_stream_test("/home/delphi/QT/IOFile/result.txt");
data_stream_text("/home/delphi/QT/IOFile/result.dat");
return a.exec();
}
3. 數據流文件的版本信息
NOTE: 當數據流文件可能在不同版本的Qt程序間傳遞數據時竖幔,需要考慮版本問題I侗妗=榉怠!
- 不同Qt版本的數據流文件格式可能不同
void setVersion(int v); // 設置讀寫版本號
int version() const; // 獲取讀寫版本號
4. 小結
- Qt中的文件輔助類用于方便讀寫操作
-
QTextStream
用于文本數據的快速讀寫 -
QDataStream
用于二進制數據的快速讀寫 -
QDataStream
的文件格式與Qt版本相關 - 數據格式文件在程序間傳遞時蒋伦, 需要考慮版本問題
聲明:此文章僅是本人在學習狄泰QT實驗分析課程所做的筆記弓摘,文章中包含狄泰軟件資料內容,一切版權歸狄泰軟件所有痕届!
實驗環(huán)境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4