1、缓冲区操作
#include
#include
#include
#include
#include void write_buf(int type, QBuffer& buf)
{if(buf.open(QIODevice::WriteOnly)){QDataStream out(&buf);out << type;if(type == 0){out << QString("D.T.Software");out << QString("xiebs");}else if(type == 1){out << 3;out << 1415;}else if(type == 2){out << 3.1415;}buf.close();}
}void read_buf(QBuffer& buf)
{if(buf.open(QIODevice::ReadOnly)){QDataStream in(&buf);int type = -1;in >> type;if(type == 0){QString str1 = "";QString str2 = "";in >> str1;in >> str2;qDebug() << str1;qDebug() << str2;}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;}buf.close();}
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QByteArray array;QBuffer buf(&array);write_buf(1, buf);read_buf(buf);return a.exec();
2、目录操作
'/'
#include
#include
#include
#include void test_dir()
{const char* path = "C:/Users/xiebs/Desktop/QDir";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);//test_dir();qDebug() << calculate_size("C:/Users/xiebs/Desktop/QDir");return a.exec();
}
分析:
QStringList list = dir.entryList();
这条语句得出的 list[i]
是文件名,不是路径,所以用
QFileInfoList list = dir.entryInfoList();
这样得出的 list[i]
是这样的。
这种其实就不是我们所说的路径,所以在 list[i]
之后加上 .absoluteFilePath()
得到的就是我们常见的路径。
在这样的 list[i]
之后加上 .fileName()
得到的就是文件名。
3、文件系统监视器
Watch.h
#ifndef WATCHER_H
#define WATCHER_H#include
#include class Watcher : public QObject
{Q_OBJECT
private:QFileSystemWatcher m_watcher;private slots:void statusChanged(const QString& path);public:explicit Watcher(QObject *parent = nullptr);void addPath(QString path);
};#endif // WATCHER_H
Watch.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.cpp
#include
#include "Watcher.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);Watcher watcher;watcher.addPath("C:/Users/xiebs/Desktop/xiebs.txt");watcher.addPath("C:/Users/xiebs/Desktop/QDir");return a.exec();
}
addPath() 这个函数的意思是 如果路径存在,则将路径添加到文件系统监视程序。如果路径不存在,或者已经被文件系统监视程序监视,则不添加该路径。
4、小结