标签:
1. 缓冲区操作
(1)Qt中缓冲区的概念
①缓冲区的本质为一段连续的存储空间
②QBuffer是Qt是缓冲区相关的类
③在Qt中可以将缓冲区看作一种特殊的IO设备
④文件流辅助类可以直接用于操作缓冲区
(2)QBuffer缓冲区的使用方式
QByteArray array; QBuffer buffer(&array);//缓冲区操作类 if (buffer.open(QIODevice::WriteOnly)) { QDataStream out(&buffer); //文件辅助类可以用于操作缓冲区 out << QString("SantaClaus"); out << 3.14; buffer.close(); }
(3)QBuffer缓冲区的使用场合
①在线程间进行不同类型的数据传递
②缓存外部设备中的数据返回
③数据读取速度小于数据写入速度(也可以是当读、写入速度不相等时)
【编程实验】缓冲区操作
#include <QCoreApplication> #include <QBuffer> #include <QDataStream> #include <QDebug> void write_buffer(int type, QBuffer& buffer) { if (buffer.open(QIODevice::WriteOnly)) { QDataStream out(&buffer); out << type; //写入“选项” if (type == 0) { out << QString("SantaClaus"); out << QString("3.14159"); } else if( type==1 ) { out << 3; out << 14159; } else if ( type == 2 ) { out << 3.14159; } buffer.close(); } } void read_buffer(QBuffer& buffer) { if (buffer.open(QIODevice::ReadOnly)) { int type = -1; QDataStream in(&buffer); in >> type; if ( type == 0) { QString name = ""; QString pi = ""; in >> name; in >> pi; qDebug() << name; qDebug() << pi; } else if( type == 1) { int a = 0; int b = 0; in >> a; in >> b; qDebug() << a; qDebug() << b; } else if ( type == 2) { double pi = 0; in >> pi; qDebug() << pi; } buffer.close(); } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //QByteArray array; //QBuffer buffer(&array);//将array作为缓冲区 QBuffer buffer;//内建缓冲区 write_buffer(0, buffer); //write_buffer(1, buffer); read_buffer(buffer); return a.exec(); }
2. 目录操作
(1)QDir是Qt中功能强大的目录操作类
①Qt中的目录分隔统一使用‘/‘
②QDir能够对目录进行任意操作(创建、删除、重命名等)
③QDir能够获取指定目录中的所有条目(文件和文件夹)
④QDir能够使用过滤字符串获取指定条目
⑤QDir能够获取系统中的所有根目录
(2)目录操作基础示例
const char* PATH = "C:/Users/SantaClaus/Desktop/QDir"; //须以‘/‘分隔 QDir dir; if (!dir.exists(PATH)) { dir.mkdir(PATH); } if (dir.exists(PATH)) { dir.cd(PATH); //进入PATH目录 QStringList list = dir.entryList(); for (int i=0; i<list.count(); ++i) { /*目录操作*/ } }
【编程实验】目录操作示例
#include <QCoreApplication> #include <QDir> #include <QFileInfo> #include <QFileInfoList> #include <QDebug> //列出指定目录下的所有文件和文件夹 void test_dir(QString path) { QDir dir; if (!dir.exists(path)) { dir.mkdir(path); //创建目录 } if (dir.exists(path)) { dir.cd(path); //进入指定目录 QStringList list = dir.entryList(); for (int i=0; i<list.count(); i++) { qDebug() << list[i]; } } } //统计文件夹所占的空间大小 unsigned int calculate_size(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 += calculate_size(list[i].absoluteFilePath()); //递归子文件夹 } } } return ret; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); const char* PATH = "C:/Users/SantaClaus/Desktop/QDir"; test_dir(PATH); qDebug() << calculate_size(PATH); return a.exec(); }
3. 文件系统监视器
(1)QFileSystemWatcher用于监控文件和目录的状态变化
①能够监控特定目录和文件的状态
②能够同时对多个目录和文件进行监控
③当目录或者文件发生改变时将触发信号
④可以通过信号和槽的机制捕捉信号并做出响应
(2)文件监控示例
//1.定义槽函数,监控状态变化 void Watcher::statusChanged(const QString& path) { /*当状态发生变化时的一些操作*/ } //2.连接状态信号到槽函数 Watcher::Watcher(QObject* parent):QObject(parent) { //文件状态变化 connect(&m_watcher, SIGNAL(fileChanged(const QString&)),...); //目录状态发生变化 connect(&m_watcher, SIGNAL(fileChanged(const QString&)),...); } //3.加入受监控的文件或目录 void Watcher::addPath(QString path) { m_watcher::addPath(path); }
【编程实验】文件监控示例
//Watcher.h
#ifndef _WATCHER_H_ #define _WATCHER_H_ #include <QObject> #include <QFileSystemWatcher> class Watcher : public QObject { Q_OBJECT QFileSystemWatcher m_watcher; private slots: void statusChanged(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(const QString&)), this, SLOT(statusChanged(const QString&))); //目录发生改变 connect(&m_watcher, SIGNAL(directoryChanged(const QString&)), this, SLOT(statusChanged(const QString&))); } void Watcher::statusChanged(const QString &path) { qDebug() << path << " is changed!"; } void Watcher::addPath(QString path) { m_watcher.addPath(path); }
//main.cpp
#include <QCoreApplication> #include "Watcher.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Watcher watcher; watcher.addPath("C:/Users/SantaClaus/Desktop/text.txt"); watcher.addPath("C:/Users/SantaClaus/Desktop/QDir"); return a.exec(); }
4. 小结
(1)缓冲区的本质为一段连续的内存空间
(2)在Qt中可以将缓冲区看作一特殊的IO设备
(3)QDir提供了强大的目录操作支持
(4)QFileSystemWatcher能够监控文件和目录的状态变化
标签:
原文地址:http://www.cnblogs.com/5iedu/p/5781459.html