导读: 1.QT文件操作简介QT中的IO操作通过统一的接口简化了文件与外部设备之间的操作方式。QT中的文件被当作一个特殊的外部设备,文件操作与外部设备相同。 1.io操作主函数界面打开设备:bool open(OpenMode模式)读取数据: qdebug,qdebug用法一、QT文件操作简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同。 1、IO操作的主要函数接口 打开设备:bool open(OpenMode mode) 读取数据:QByteArray read(qint64 maxSize) 写入数据:qint64 write(const QByteArray & byteArray) 关闭设备:void close() IO操作的本质是连续存储空间的数据读写 2、IO设备的类型 顺序存取设备:只能从头开始顺序读写数据,不能指定数据的读写位置 随机存取设备:可以定位到任意位置进行数据的读写 QT中IO设备的继承类图: 3、文件操作实例 QFile是QT中用于文件操作的类,QFile对象对应实际的文件。 void write(QString f){ QFile file(f); if( file.open(QIODevice::WriteOnly | QIODevice::Text) ) { file.write("D.T.Software\n"); file.write("Delphi Tang\n"); file.close(); }} void read(QString f){ QFile file(f); if( file.open(QIODevice::ReadOnly | QIODevice::Text) ) { QByteArray ba = file.readLine(); QString s(ba); qDebug() << s; file.close(); }} QFileInfo类用于读取文件的属性信息 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(); qDebug() << info.suffix(); qDebug() << info.size(); QTemporaryFile是QT中的临时文件操作类,用来安全创建全局唯一的临时文件,QTemporaryFile对象销毁时对应的临时文件将被删除,临时文件的打开方式为QIODevice::ReadWrite,临时文件常用于大数据传递或者进程间通信场合。 QTemporaryFile tempFile; if( tempFile.open() ) { tempFile.write("D.T.Software"); tempFile.close(); } 二、文本流与数据流 QT中将文件分为文本文件和数据文件,文本文件内容是可读的文本字符,数据文件的内容是二进制数据。 QFile直接支持文本文件和数据文件的操作,主要函数接口如下: qint64 read( char * data, qint64 maxSize) QByteArray read( qint64 maxSize) qint64 write(const char * data, qint64 maxSize) qint64 write(const QByteArray & byteArray) 为了简化文本文件和数据文件的读写操作,QT提供了QTextStream和QDataStream辅助类。QTextStream可将写入的数据全部转换为可读文本,QDataStream可将写入的数据根据类型转换为二进制数据。 1、QTextStream使用方法 QFile file(f); if( file.open(QIODevice::WriteOnly | QIODevice::Text) ) { QTextStream out(&file); out << QString("D.T.Software") << endl; out << QString("Result: ") << endl; out << 5 << '*' << 6 << '=' << 5 * 6 << endl; file.close(); } if( file.open(QIODevice::ReadOnly | QIODevice::Text) ) { QTextStream in(&file); while( !in.atEnd() ) { QString line = in.readLine(); qDebug() << line; } file.close(); } 2、QDataStream使用方法 QFile file(f); if( file.open(QIODevice::WriteOnly) ) { QDataStream out(&file); out.setVersion(QDataStream::Qt_4_7); out << QString("D.T.Software"); out << QString("Result: "); out << 3.14; file.close(); } if( file.open(QIODevice::ReadOnly) ) { QDataStream in(&file); QString dt = ""; QString result = ""; double value = 0; in.setVersion(QDataStream::Qt_4_7); in >> dt; in >> result; in >> value; file.close(); qDebug() << dt; qDebug() << result; qDebug() << value; } QDataStream在不同的QT版本中数据流文件格式可能是不同的,如果数据流文件需要在不同版本的QT程序间传递时需要考虑版本问题。 void setVersion(int v) int version() const 三、QBuffer缓冲区 QT中预定义了缓冲区的类QBuffer,可以将缓冲区看成一种特殊的IO设备,文件流辅助类可以直接用于操作缓冲区。QBuffer缓冲区写入和读取的数据必须是同一种数据类型,不能混合多种数据类型。 QBuffer的使用场合: A、线程间不同类型的数据传递 B、缓存外部设备中的数据返回 C、数据读取速度小于写入速度 QBuffer使用方法如下: QByteArray array; QBuffer buffer(&array); if(buffer.open(QIODevice::WriteOnly)) { QDataStream out(&buffer); out << QString("3.1234"); out << QString("scorpio"); out << QString("1234"); buffer.close(); } if(buffer.open(QIODevice::ReadOnly)) { QDataStream in(&buffer); QString name; QString a; QString b; in >> a; in >> name; in >> b; buffer.close(); qDebug() << name; qDebug() << a; qDebug() << b; } 四、目录操作 1、QDir QT中提供了目录操作类QDir,QDir功能如下: A、目录分隔符统一使用’/’ B、能够对目录进行任意操作(创建、删除、重命名) C、能够获取指定目录中的所有条目(文件和文件夹) D、能够使用过滤字符串获取指定条目 E、能够获取系统中的所有根目录 QDir使用方法如下: QDir dir; QString path("D:/Download/QT实验分析教程/第2期 — 否极泰来/第34课 - 缓冲区操作与目录操作/代码/34-3"); if(!dir.exists()) { dir.mkdir(path); } else { dir.cd(path); QStringList list = dir.entryList(); for(int i = 0; i < list.count(); i++) { qDebug() << list[i]; } } 计算文件大小 unsigned int FileSize(QString path){ QFileInfo info(path); unsigned int ret = 0; if(info.isFile()) { ret = info.size(); } else if(info.isDir()) { QDir dir(path); QFileInfoList list = dir.entryInfoList(); for(int i = 0; i < list.count(); i++) { if((list[i].fileName() != ".") && (list[i].fileName() != "..")) { ret += FileSize(list[i].absoluteFilePath()); } } } return ret;} 2、QFileSystemWatcher QT中预定义了用于监控文件和目录变化的类QFileSystemWatcher, QFileSystemWatcher主要功能如下: A、能够监控特定目录和文件的状态 B、能够同时对多个文件和目录进行监控 C、当目录或文件发生改变时触发信号 D、通过信号与槽的机制捕捉信号并做出响应 通常要使用QFileSystemWatcher需要自定义文件监视类。 Watcher.h #ifndef WATCHER_H#define WATCHER_H#include <QObject>#include <QFileSystemWatcher>class Watcher : public QObject{ Q_OBJECTprivate: QFileSystemWatcher m_watcher;private slots: void FileChanged(const QString & path);public: explicit Watcher(QObject *parent = 0); void addPath(QString path);};#endif // WATCHER_H Watcher.cpp #include "Watcher.h"#include <QDebug>Watcher::Watcher(QObject *parent) :QObject(parent){ connect(&m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(FileChanged(QString))); connect(&m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(FileChanged(QString)));}void Watcher::FileChanged(const QString & path){ qDebug() << path << "is changed.";}void Watcher::addPath(QString path){ m_watcher.addPath(path);} main.cpp #include <QtCore/QCoreApplication>#include <QString>#include "Watcher.h" int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); Watcher watcher; QString path("D:/QT"); watcher.addPath(path); return a.exec();} 总结:以上内容就是对于qdebug,qdebug用法的详细介绍,文章内容部分转载自互联网,希望对您了解qdebug有帮助和参考的价值。
|