一、概述
Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图:
- QIODevice:所有I/O设备类的父类,提供字节块读写的通用操作以及基本接口
- QFileDevice:Qt5新增加的类,提供有关文件操作的通用实现
- QFile:访问本地文件或嵌入资源
- QTemporaryFile:创建和访问本地系统的临时文件
- QBuffer:读写QbyteArray,内存文件
- QProcess:运行外部程序,处理进程间通信
- QAbstractSocket:所有套接字的父类
- QTcpSocket:TCP协议网络数据传输
- QUdpSocket:传输UDP保温
- QSslSocket:使用SSL/TLS传输数据
二、 QFileInfo文件信息的获取
QFile提供从文件中读取和写入数据的方法,构造函数参数为文件路径。也可以先创建好对象之后,使用setFileName()来修改
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>
//QFileInfo 文件信息类
QFileInfo info(path);//参数为文件的路径
qDebug() << "大小" << QString::number(info.size()) << "后缀名" << info.suffix() << " 文件名称:"<<info.fileName() << " 文件路径:"<< info.filePath();
qDebug() << "创建日期" << info.created().toString("yyyy/MM/dd hh:mm:ss ap t");
qDebug() << "最后修改日期"<<info.lastModified().toString("yyyy-MM-dd hh:mm:ss");
三、 文本数据输入/输出
/*读取文件*/
QFile file("test.txt");
if(!file.open(QFile::ReadOnly | QFile::QIODevice::Text))
{
qDebug() << "file open fail";
return;
}
else
{
QTextStream out(&file); //创建输出流
while(!out.atEnd())
{
QString oneLine = out.readLine(); //逐行读取
qDebug() <<oneLine;
}
}
file.close();
/*写入文件*/
QFile fileIn("test.txt");
if(!fileIn.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
{
qDebug() <<"file open fail";
return;
}
QTextStream inStr(&fileIn);
QString strInfo = "hello, wrold!";
inStr << strInfo << "\n";
fileIn.close();
QDataSteam提供基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统,CPU或者字节顺序(大端或小端)。可以直接读写没编码的二进制数据。例如图像、视频、音频等。实例如下:
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
//关联文件
QDataStream stream(&file);
QString str = "hello, wrold";
//借助QDataStream将内容以二进制的形式输入文件
stream << str;
file.close();
QFile.open()的参如下:
- QIODevice::NotOpen 未打开
- QIODevice::ReadOnly 以只读方式打开
- QIODevice::WriteOnly 以只写方式打开
- QIODevice::ReadWrite 以读写方式打开
- QIODevice::Append 以追加的方式打开,新增加的内容将追加到文件尾
- QIODevice::Truncate 以重写的方式打开,再写入数据前会将原有数据清除
- QIODevice::Text 在读取时,将行结束符转换成"\n",再写入时,将行结束符转换为本地格式
- QIODevice::Unbuffered 忽略缓存29| 30| */