34_缓冲操作与目录操作

关键词:缓冲区操作、目录操作、文件系统监视器

1. 缓冲区操作

  • Qt中缓冲区的概念
    1) 缓冲区的本质为一段连续的存储空间
    2) QBuffer时Qt中缓冲区相关的类
    3)在Qt中可以将缓冲区看作一种特殊的IO设备
    4)文件流辅助类可以直接用于操作缓冲区

  • QBuffer缓冲区的使用方式

#include 
#include 
#include 
#include 
#include 

void write_buffer(int type, QBuffer& buffer)
{
    if( buffer.open(QIODevice::WriteOnly))
    {
        QDataStream out(&buffer);

        out << type;

        if( type == 0 )
        {
            out << QString("D.T.Software");
            out << QString("3.1415");
        }
        else if (type == 1 )
        {
            out << 3;
            out << 1415;
        }
        else if ( type == 2 )
        {
            out << 3.1415;
        }

        buffer.close();
    }
}

void read_buffer(QBuffer& buffer)
{
    if( buffer.open(QIODevice::ReadOnly))
    {
        int type = -1;
        QDataStream in(&buffer);

        in >> type;

        if( type == 0 )
        {
            QString dt = "";
            QString pi = "";

            in >> dt;
            in >> pi;

            qDebug() << dt;
            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 value = 0;

            in >> value;

            qDebug() << value;
        }

        buffer.close();
    }

}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QByteArray array;
    QBuffer buffer(&array);

    write_buffer(2, buffer);

    read_buffer(buffer);
    
    return a.exec();
}

  • QBuffer缓冲区的使用场合
    1)在线程间进行不同类型的数据传递
    2)缓存外部设备中的数据返回
    3)数据读取速度小于数据写入速度

2. 目录操作

  • QDir是Qt中功能强大的目录操作类
    1)Qt中的目录分隔符统一使用‘/’
    2)QDir能够对目录进行任意操作(创建、删除、重命名)
    3)QDir能够获取指定目录中的所有条目(文件和文件夹)
    4)QDir能够使用过滤字符串获取指定条目
    5)QDir能够获取系统中的所有根目录

  • 目录操作基础示例

    34_缓冲操作与目录操作_第1张图片

#include 
#include 
#include 
#include 
#include 

void test_dir()
{
    const char* PATH = "/home/delphi/QT/Dir";
    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

3. 文件系统监视器

  • QFileSystemWatcher用于监控文件和目录的状态变化
    1) 能够监控特定目录和文件的状态
    2) 能够同时对多个目录和文件进行监控
    3)当目录或文件发生改变时触发信号
    4)可以通过信号与槽的机制捕捉信号并做出响应
  • 文件监控示例
34_缓冲操作与目录操作_第2张图片

Watcher.h

#ifndef _WATCHER_H_
#define _WATCHER_H_

#include 
#include 

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 

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.h

#include 
#include "Watcher.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Watcher watcher;

    watcher.addPath("/home/delphi/QT/FileSystemWatcher/test.txt");
    watcher.addPath("/home/delphi/QT/FileSystemWatcher/test");
    
    return a.exec();
}

4. 小结

  • 缓冲区的本质为一段连续的内存空间
  • 在Qt中可以将缓冲区看作一种特殊的IO设备
  • QDir提供了强大的目录操作支持
  • QFileSystemWathcher能够监控文件和目录的状态变化

声明:此文章仅是本人在学习狄泰QT实验分析课程所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

你可能感兴趣的:(34_缓冲操作与目录操作)