Qt中IO操作的处理方式
- Qt通过统一的接口简化了文件与外部设备的操作方式,秉承了Linux下的“一切皆文件”。
- Qt中的文件操作与外部设备操作相同,文件操作就是一种特殊的外部设备,都属于IO操作。
- IO设备操作四部曲:打开设备、读设备数据、写设备数据、关闭设备。
- 打开设备 bool open(OpenMode mode)
- 读取数据QByteArray read(qint64 maxsize)
- 写入数据qint64 write(const QByteArray &bytearray)
- 关闭设备 void close()
- IO操作的本质就是读写一段连续的存储空间。
Qt中IO设备类型:
- 顺序存取设备:只能从头开始顺序的读写数据,不能指定数据的读写位置,比如对串口编程。
- 随机存取设备:可以定位到任意位置进行数据的读写。
QFile文件读写
QFile file(QString("C:/Users/song8023/Desktop/test.txt"));//定义一个文件QFile类对象时需要指定路径和名字,
if(file.open(QIODevice::WriteOnly | QIODevice::Text))//以只写的方式打开文件时,名字不存在则生成,存在则先删掉原先的再重写
{
file.write("Hello World\n");
file.write("I Love You");
file.close();
}
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QByteArray array = file.readAll();
QString s(array);
qDebug() << s;
file.close();
}
更多尽在Qt帮助文档
QFileInfo文件属性
- QFileInfo类为我们提供了系统无关的文件信息,包括文件的名字和在文件系统中位置,文件的访问权限,是否是目录或符合链接等等。并且,通过这个类,可以修改文件的大小和最后修改时间、读取时间。同时,QFileInfo类也可以用来取到Qt 资源的相关信息。
- QFileInfo既可以表示绝对路径,也可以表示相对路径的文件。其中,绝对路径就是以”/”开始的路径(或者在Windows系统上就是以某个盘符开始的路径)。相对路径就是相对于当前目录的一个文件或目录。我们在开发中,可以使用给类的成员函数isRelative() 来判断一个QFileInfo表示的是一个相对路径还是一个绝对路径。也可以使用makeAbsolute()将一个相对路径转换为一个绝对路径。
QFile file(QString("C:/Users/song8023/Desktop/test.txt"));
QFileInfo info(file);
qDebug() << endl;
qDebug() << info.fileName();//文件名
qDebug() << info.filePath();//文件路径
qDebug() << info.exists();//文件是否存在
qDebug() << info.isFile();//文件或文件夹
qDebug() << info.isReadable();//是否可读
qDebug() << info.isWritable();//是否可写
qDebug() << info.created();//被创建时间
qDebug() << info.lastRead();//最近一次访问时间
qDebug() << info.lastModified();//最近一次修改时间
qDebug() << info.suffix();//文件后缀是什么
qDebug() << info.size();//文件大小
更多尽在Qt帮助文档
QTemporaryFile临时文件
- QTemporaryFile继承自QFile
- 通过该类可以安全的创建一个全局唯一的临时文件
- 当临时文件对象销毁时对应的临时文件也会被销毁
- 临时文件的打开方式是QIODevice::ReadWrite
- 临时文件常用于大数据传递和进程间通信的场合
- 实现进程间通信:从A进程中往一个文件中写数据,然后打开B进程,从文件中读取数据就能将A想要传输的数据发送到B进程,就是可以通过文件进行进程间通信
- 这是一个重要的技术,能避免存储在临时文件的应用程序数据损坏。
在调用close()之后重新打开QTemporaryFile是安全的,只要临时文件对象还没有销毁,临时文件就一直存在并由QTemporaryFile内部保持打开。
QTemporaryFile Tempfile;
QFileInfo info(Tempfile);
if(Tempfile.open())
{
Tempfile.write("Hello World");
Tempfile.close();
}
if(Tempfile.open())
{
QByteArray array = Tempfile.readAll();
QString s(array);
qDebug() << s;
Tempfile.close();
}
qDebug() << info.fileName();
qDebug() << info.filePath();
小结
- Qt通过统一的方式读写外部设备和文件
- Qt中的设备类型分为顺序存取和随机存取两种
- QFile提供文件相关操作
- QFileInfo提供文件属性相关操作
- QTemporaryFile提供临时文件操作