以普通文件为例(文本文件和二进制文件在这里统称为普通文件),它们是存放在计算机的硬盘上的,在Qt中它被视为一种特殊的IO设备,操作IO设备实质上是对一段存储空间(以块为单位)的读写。
QIODevice是一个抽象类(类内含纯虚函数,不可生成对象),为IO设备提供了共同的实现和接口,支持读写QFile、QBuffer和QTCPSocket等以块为单位的数据。IO操作的常用接口有:
(1) 打开设备:
bool open(OpenMode mode)
(2) 读取数据:
qint64 read(char * data, qint64 maxSize)
QByteArray read(qint64 maxSize)
QByteArray readAll()
qint64 readLine(char * data, qint64 maxSize)
QByteArray readLine(qint64 maxSize = 0)
(3) 写入数据:
qint64 write(const char * data, qint64 maxSize)
qint64 write(const char * data)
qint64 write(const QByteArray &byteArray)
(4) 关闭设备
void close()
QIODevice中区分了两种类型的设备:随机读写设备和顺序读写设备,对于随机读取设备还可以调用seek()函数定位任意位置,调用pos()函数获取当前位置。QFile类和QBuffer就是随机读取设备的例子。
1. QFile文件类
QFile是Qt中用于文件操作的类,生成的对象需要对应到计算机上的某个文件。建立Qt控制台程序:
#include <QtCore/QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QFileInfo>
#include <QDateTime>
#include <QByteArray>
void write_file(QString file_path)
{
QFile file(file_path);
//以只读文本的方式打开(默认打开方式是数据文件)
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
file.write("QFile test\n");
file.write("2017.09.14");
file.close();
}
}
void read_file(QString file_path)
{
QFile file(file_path);
//以只写文本的方式打开
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
//读取文件全部内容
QByteArray dat = file.readAll();
QString str(dat);
qDebug() << str;
file.close();
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
write_file("./tmp.txt");
read_file("./tmp.txt");
return a.exec();
}
运行:
另外通过类QFileInfo可读取文件属性信息: