Qt 文件处理详细讲解教程 上篇
创始人
2024-08-01 01:50:16
0

本文介绍的是Qt 文件处理的内容。Qt提供了QFile来进行文件处理,为了更方便地处理文本文件或二进制文件Qt还提了QTextStream和QDataStream,处理临时文件可以使用QTemporaryFile,获取文件信息可以使用QFileInfo,处理目录可以使用QDir.监视文件和目录变化可以使用QFileSystemWatcher. 。

读写文本文件

QFile提供了读写文件的接口,QFile可以读写文本文件,二进制文件Qt资源文件,也可以使用更方便的QTextStream,QDataStream读取文本文件和二进制文件,要打开一个文件,可以在构造函数中指定文件名,也可以在任何时候使用setFileName()函数设置文件名,打开文件使用open函数,关闭文件使用close函数。QFile中可以使用QIODevice中继承的readLine()函数读写文本文件的一行。如:

  1. QFile file("zeki.txt");  
  2. if(file.open(QIODevice::ReadOnly))  
  3. {  
  4.     char buffer[2048];  
  5.     qint 64 lineLen=file.readLine(buffer,sizeof(buffer));  
  6.     if(lineLen!=-1)  
  7.     {  
  8.        qDebug<       }  

如果读取成功,readLine返回实际读取的字节数,如果读取失败则返回-1

QTextStream提供了更为方便的接口来读写文本,QTextStream可以操作QIODevice,QByteArray,QString.QTextStream使用流操作符,可以方便地读写单词,行和数字。为了产生文本,QTextStream提供了填充,对齐和数字格式化的格式选项。如

  1. QFile data("test.txt");  
  2. if(data.open(QFile::WriteOnly|QFile::Truncate))  
  3. {  
  4.      QTextStream out(&data);  
  5.      out<    } 

QTextStream的格式化函数

qSetFieldWidth(int width)  设置字段宽度
qSetPadChar(QChar ch)      设置填充字符
qSetRealNumberPrecision(int precision) 设置实数精度

在QTextStream中使用的默认编码是QTextCodec::codecForLocal()函数返回的编码,同时能够自动检测Unicode。也可以使用QTextStream::setCodec(QTextCodec *codec)函数设置的流编码。

操作二进制文件

QDataStream类提供了将二进制文件串行化的功能,QDataStream实现了c++基本数据类型的串行化,如char,short,int char* 更复杂的数据类型串行化通过将数据类型分解为基本的数据类型来完成。下面用来写二进制数据到数据流。

  1. QFile file("binary.dat");  
  2. file.open(QIODevice::WriteOnly);  
  3. QDataStream out(&file);  
  4. out< out<<(qint32)42<<(qint32)96; 

将上面写入的文件读入的过程为:

  1. QFile file("binary.dat");  
  2. file.open(QIODevice::ReadOnly);  
  3. QDataStream in(&file);  
  4. QString str;  
  5. qint32 x,y;  
  6. in>>str>>x>>y; 

每一个条目都可以定义的二进制格式写入文件,Qt中的很多类型,包括QBrush,QColor,QDateTime,QFont,QPixmap,QString,QVariant等都可以写入数据流。

如果需要读取原始数据,可以使用readRawData()读取数据到预先定义好的char *缓冲区,写原始数据使用writeData(),读写原始数据需要对数据进行编码和解码。

下面例子演示了使用QDataStream进行读写文件的过程。

  1. #include  
  2. #include  
  3. using namespace std;  
  4. int main(int argc,char **argv)  
  5. {  
  6.    QCoreApplication app(argc,argv);  
  7.    QFile file("binary.file");  
  8.    file.open(QIODevice::WriteOnly|QIODevice::Truncate);  
  9.    QDataStream out(&file);  
  10.    out<    out<    out<<(qint32)21;  
  11.    file.close();  
  12.      
  13.    file.setFileName("binary.file");  
  14.    if(!ifle.open(QIODevice::ReadOnly))  
  15.    {  
  16.       cout<<"打开文件错误!";  
  17.       return 1;  
  18.    }  
  19.    QDataStream in(&file);  
  20.    QString name;  
  21.    QDate birthday;  
  22.    qint32 age;  
  23.    in>>name>>birthday>>age;  
  24.       qDebug()<       cout<       qPrintable(birthday.toString("yyyy MMMM dd dddd"));  
  25.    file.close();  
  26.    return 0;  

在例子中,QDataStream类写入了姓名(QString),生日(QDate),和年龄(qint32)三个数据,读取时使用相同的类型读出。QDataStream可以读取任意以QIODevice为基类生成的对象产生的数据。如QTcpSocket,QUdpSocket,QBuffer,QFile,QProcess等类的数据。可以使用QDataStream在QAbstractSocket一端写入数据,另一端使用QDataStream读取数据,这样就免去了繁琐的高低端字节转换过程。

临时文件

实际应用中有时可能需要使用临时文件Qt中提供QTemporaryFile来提供临时文件。QTemporayFile可以安全地创建一个***无二的临时文件。临时文件通过open()来创建。Qt可以保证临时文件不会重复。在临时文件对象销毁后,将自动删除该临时文件。临时文件通过close()关闭后还可以打开,只要临时文件对象还没有销毁,临时文件就一直存在并由QTemporaryFile内部保持打开。系统的临时目录可以通过QDir::tempPath()来获取,unix/linux系统上的临时目录通常时/temp在windows上通常是TEM/TMP指定

小结:有关Qt文件处理先到这,想要对关Qt文件处理,了解更多的话,请关注 Qt 文件处理详细讲解教程 下篇。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...