1. Qt的中IO操作
(1)Qt中IO操作的处理方式
①Qt通过统一的接口简化了文件和外部设备的操作方式
②Qt中的文件被看作一种特殊的外部设备
③Qt中的文件操作与外部设备的操作相同
(2)IO操作中的关键函数接口——IO操作的本质:连续存储空间的数据读写
①打开设备:bool open(OpenMode mode);
②读取数据:QByteArray read(qint64 maxSize);
③写入数据:qint64 write(const QByteArray& byteArray);
④关闭设备:void close();
(3)Qt中IO设备的类型
①顺序存储设备:只能从头开始顺序的读写数据,不能指定数据的读写位置(如串口)
②随机存取设备:可以定位到任意的位置进行数据的读写(seek function),如文件
2. Qt中IO设备的继承层次图
3. Qt中的文件操作
(1)QFile是Qt中用于文件操作的类
(2)QFile对象对应到计算机上的一个文件
(3)QFileInfo类用于读取文件的属性信息
【编程实验】文件操作初体验
//32-1.pro
QT += core QT -= gui CONFIG += c++ TARGET = - CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp
//main.cpp
#include <QCoreApplication> #include <QFile> #include <QFileInfo> #include <QDateTime> #include <QDebug> void write(QString f) { QFile file(f); //可写、文本文本,当文件不存在时会创建新文件 if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { file.write("Line1\n"); file.write("Line2\n"); file.close(); } } void read(QString f) { QFile file(f); if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { QByteArray ba = file.readAll();//file.readLine(5);//读4个字符 QString s(ba); qDebug() << s; file.close(); } } void info(QString f) { QFile file(f); QFileInfo info(file); qDebug() << info.exists(); qDebug() << info.isFile();//判断文件或文件夹 qDebug() << info.isReadable(); qDebug() << info.isWritable(); qDebug() << info.created(); qDebug() << info.lastRead(); qDebug() << info.lastModified(); qDebug() << info.path(); //路径,不包含文件名 qDebug() << info.fileName();//如"test.txt" qDebug() << info.suffix();//后缀名(如txt) qDebug() << info.size(); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString file("C:/Users/SantaClaus/Desktop/test.txt"); write(file); read(file); info(file); return a.exec(); }
4. Qt中的临时文件操作类:QTemporaryFile
(1)安全地创建一个全局唯一的临时文件(被存放在系统的临时文件目录下)
(2)当对象销毁后,对应的临时文件将随后被删除(具体的删除时机由操作系统决定)
(3)临时文件的打开方式己被指定为:QIODevic::ReadWrite
(4)临时文件继承于QFile,常用于大数据传据或者进程间通信的场合。
【编程实验】临时文件的使用
//32-2.pro
QT += core QT -= gui CONFIG += c++ TARGET = - CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp
//main.cpp
#include <QCoreApplication> #include <QTemporaryFile> #include <QFileInfo> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QTemporaryFile tempFile; //无须指定路径(保存在系统临时文件夹中) //文件名也不必指定,是个临时的文件名 if(tempFile.open()) { tempFile.write("SantaClaus"); tempFile.close(); } tempFile.open(); QByteArray ba = tempFile.readAll(); QString s(ba); qDebug() << s; QFileInfo info(tempFile); qDebug() << info.isFile(); qDebug() << info.path(); qDebug() << info.fileName(); return a.exec(); } /*输出结果: "SantaClaus" true "C:/Users/SantaClaus/AppData/Local/Temp" "32-2.Hp7352" */
5. 小结
(1)Qt通过统一的方式读写文件和外部设备
(2)Qt中IO设备类型分为顺序存取和随机存取两种
(3)QFile提供了文件操作相关的方法
(4)QFileInfo提供了读取文件属性相关的方法
(5)Qt中提供了临时文件操作类:QTemporaryFile