關(guān)鍵詞:緩沖區(qū)操作丐膝、目錄操作瘦黑、文件系統(tǒng)監(jiān)視器
1. 緩沖區(qū)操作
Qt中緩沖區(qū)的概念
1) 緩沖區(qū)的本質(zhì)為一段連續(xù)的存儲空間
2)QBuffer
時Qt中緩沖區(qū)相關(guān)的類
3)在Qt中可以將緩沖區(qū)看作一種特殊的IO設(shè)備
4)文件流輔助類可以直接用于操作緩沖區(qū)QBuffer
緩沖區(qū)的使用方式
#include <QtCore/QCoreApplication>
#include <QBuffer>
#include <QByteArray>
#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("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
緩沖區(qū)的使用場合
1)在線程間進行不同類型的數(shù)據(jù)傳遞
2)緩存外部設(shè)備中的數(shù)據(jù)返回
3)數(shù)據(jù)讀取速度小于數(shù)據(jù)寫入速度
2. 目錄操作
QDir
是Qt中功能強大的目錄操作類
1)Qt中的目錄分隔符統(tǒng)一使用‘/’
2)QDir
能夠?qū)δ夸?strong>進行任意操作(創(chuàng)建、刪除洽洁、重命名)
3)QDir
能夠獲取指定目錄中的所有條目(文件和文件夾)
4)QDir
能夠使用過濾字符串獲取指定條目
5)QDir
能夠獲取系統(tǒng)中的所有根目錄-
目錄操作基礎(chǔ)示例
#include <QtCore/QCoreApplication>
#include <QDir>
#include <QFileInfo>
#include <QFileInfoList>
#include <QDebug>
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<list.count(); i++)
{
qDebug() << list[i];
}
}
}
unsigned int calculate_size(QString path) // 計算文件大小
{
unsigned int ret = 0;
QFileInfo info(path);
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);
qDebug() << calculate_size("/home/delphi/QT/Dir");
return a.exec();
}
3. 文件系統(tǒng)監(jiān)視器
-
QFileSystemWatcher
用于監(jiān)控文件和目錄的狀態(tài)變化
1) 能夠監(jiān)控特定目錄和文件的狀態(tài)
2) 能夠同時對多個目錄和文件進行監(jiān)控
3)當(dāng)目錄或文件發(fā)生改變時觸發(fā)信號
4)可以通過信號與槽的機制捕捉信號并做出響應(yīng)
- 文件監(jiān)控示例
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.h
#include <QtCore/QCoreApplication>
#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. 小結(jié)
- 緩沖區(qū)的本質(zhì)為一段連續(xù)的內(nèi)存空間
- 在Qt中可以將緩沖區(qū)看作一種特殊的IO設(shè)備
-
QDir
提供了強大的目錄操作支持 -
QFileSystemWathcher
能夠監(jiān)控文件和目錄的狀態(tài)變化
聲明:此文章僅是本人在學(xué)習(xí)狄泰QT實驗分析課程所做的筆記渴邦,文章中包含狄泰軟件資料內(nèi)容,一切版權(quán)歸狄泰軟件所有晦譬!
實驗環(huán)境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4