您的位置:首页 > 编程语言 > Qt开发

Qt模块化笔记之core——Input/Output文件操作(2)

2013-12-27 10:28 337 查看
上节介绍了QIoDevice及QFile等的使用,相信大家对这些输入输出类有一些认识了,本节将主要介绍下一些算是作为辅助用的类,它们是:

QDir QFileInfo QFileSystemWatcher  QTemporaryDir QTemporaryFile

以下分别介绍:

—————————————————————————————————————————————————————————————

QDir 是文件系统的目录类,用于目录相关操作,提供文件名及路径信息


Public Functions

 QDir(const QDir & dir)
 QDir(const QString & path =
QString())
 QDir(const QString & path,
const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ), Filters filters = AllEntries)
 ~QDir()
QStringabsoluteFilePath(const QString & fileName)
const 返回文件绝对路径
QStringabsolutePath() const
QStringcanonicalPath()
const返回规范路径;具体可见点此进入
boolcd(const QString & dirName)改变QDir中原本的路径,使它代表一个新的目录名
cd应是change dir的缩写
boolcdUp()返回到上一级目录, cd("..") 等价于cdUp().
uintcount() const 返回一个目录中所有子目录及文件数量和
QStringdirName() const 
QFileInfoListentryInfoList(const QStringList & nameFilters,
Filters filters = NoFilter, SortFlags sort = NoSort) const返回目录内所有文件信息,第一个参数即加入一条字符串列表的过滤器,详细见例子
QFileInfoListentryInfoList(Filters filters =
NoFilter, SortFlags sort = NoSort) const
QStringListentryList(const QStringList & nameFilters,
Filters filters = NoFilter, SortFlags sort = NoSort) const返回过滤后所有文件名及目录名
QStringListentryList(Filters filters =
NoFilter, SortFlags sort = NoSort) const
boolexists(const QString & name)
const
boolexists() const
QStringfilePath(const QString & fileName)
const
Filtersfilter() const 
boolisAbsolute() const 判断是否是绝对路径
boolisReadable() const 判断是否可读
boolisRelative() const是否相对路径
boolisRoot() const 是否是根目录,Unix的root如"/". Windows盘符如"c:/".
boolmakeAbsolute()将给的相对路径转成绝对
boolmkdir(const QString & dirName)
const创建一个子目录
boolmkpath(const QString & dirPath)
const创建多重目录,如创建"/home/dir1/dir2/dir3",这样,dir1,dir2,dir3都将被创建
QStringListnameFilters() const
QStringpath() const
voidrefresh() const刷新目录信息
QStringrelativeFilePath(const QString & fileName)
const
boolremove(const QString & fileName)移除某文件
boolremoveRecursively()移除整个目录,即使它不为空目录,Recursively表递归的
boolrename(const QString & oldName,
const QString & newName)
boolrmdir(const QString & dirName)
const 只能移除空目录,移除空目录成功返回true
boolrmpath(const QString & dirPath)
const 移除所有相关父目录,与mkdir相反
voidsetFilter(Filters filters)创建过滤器
voidsetNameFilters(const QStringList & nameFilters)
voidsetPath(const QString & path)
voidsetSorting(SortFlags sort)排列方式,如按文件名或时间或大小等
SortFlagssorting() const
voidswap(QDir & other)将当前的QDir实例替换成另一个
booloperator!=(const QDir & dir)
const
QDir &operator=(const QDir & dir)
QDir &operator=(QDir && other)
booloperator==(const QDir & dir)
const
QStringoperator[](int pos)
const
 主要难的是entryInfoList函数,举例如下:

QDir dir("一个新目录");
QStringList filters;
if(dir.exists())
{
qDebug()<<dir.count();
filters << "*.txt"<< "*.cpp";
QList<QFileInfo> fl=dir.entryInfoList(filters,QDir::Files,QDir::Time);
foreach (QFileInfo a, fl) {
qDebug()<< a.baseName();
}
}else
{
qDebug()<<"不存在目录";
}
过滤是一个QStrinList类型 的,我们在filters过滤器中加入了txt和cpp后辍

函数原型如下:

entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
将过滤器加入第一个参数,它是名称过滤,只有以txt和cpp后辍满足,是自定义的;

第二个过滤器是系统的,为枚举类型,有一些可选 的诸如,可以不包括进快捷方式,只读或只写等,上述代码中列举所有文件

第三个为排序,枚举类型,可按时间,文件大小等排序;

最后用是foreach遍历并在控制台输出了满足条件的文件名;

如下:其中一个doc后辍的被过滤掉了(如需要测试源码,需要将相关文件夹复制到构建目录中)



—————————————————————————————————————————————————————————————

QFileInfo 可得出文件相当的信息,如文件大小,修改时间等


Public Functions

 QFileInfo()
 QFileInfo(const QString & file)
 QFileInfo(const QFile & file)
 QFileInfo(const QDir & dir,
const QString & file)
 QFileInfo(const QFileInfo & fileinfo)
 ~QFileInfo()
QDirabsoluteDir() const
QStringabsoluteFilePath() const
QStringabsolutePath() const
QStringbaseName() const最基本名称,文件名不带后辍(suffix)
QStringbundleName() const
boolcaching() const 是否支持缓存?
QStringcanonicalFilePath() const返回抽象路径名的规范路径名字符串
QStringcanonicalPath() const
QStringcompleteBaseName() const 文件名,除后辍.
以后,如*.tar.gz压缩格式,返回“*.tar”
QStringcompleteSuffix() const 文件完整的后辍,如*.tar.gz压缩格式,返回“tar.gz”
QDateTimecreated() const返回创建时间
QDirdir() const 返回一个QDir对象,比较复杂,见例子的输出
boolexists() const
QStringfileName() const 完整文件名,带后辍
QStringfilePath() const
QStringgroup() const 文件所属“组”,windows中不存在这个
uintgroupId() const
boolisAbsolute() const
boolisBundle() const
boolisDir() const
boolisExecutable() const 是否是可执行程序
boolisFile() const
boolisHidden() const
boolisNativePath() const
boolisReadable() const
boolisRelative() const
boolisRoot() const
boolisSymLink() const
boolisWritable() const
QDateTimelastModified() const 最后修改时间
QDateTimelastRead() const 最后读取时间
boolmakeAbsolute()
QStringowner() const
uintownerId() const
QStringpath() const
boolpermission(QFile::Permissions permissions)
const
QFile::Permissionspermissions() const
voidrefresh()
voidsetCaching(bool enable)
voidsetFile(const QString & file)
voidsetFile(const QFile & file)
voidsetFile(const QDir & dir,
const QString & file)
qint64size() const 返回文件大小
QStringsuffix() const
voidswap(QFileInfo & other)
QStringsymLinkTarget() const
booloperator!=(const QFileInfo & fileinfo)
const
QFileInfo &operator=(const QFileInfo & fileinfo)
QFileInfo &operator=(QFileInfo && other)
booloperator==(const QFileInfo & fileinfo)
const
QFileInfo info1("一个新目录/test.txt");
if(info1.exists())
{
qDebug()<<info1.baseName();
qDebug()<<info1.completeBaseName();
qDebug()<<info1.created().toString();
qDebug()<<info1.lastModified().toString();
qDebug()<<info1.lastRead().toString();
qDebug()<<info1.dir();
qDebug()<<info1.size();
qDebug()<<info1.absoluteFilePath();
}


输出如下:

"test"
"test"
"周六 十二月 28 23:24:32 2013"
"周五 十二月 27 10:53:49 2013"
"周六 十二月 28 23:24:32 2013"
QDir( "一个新目录" , nameFilters = { * }, QDir::SortFlags( Name | IgnoreCase ) , QDir::Filters( Dirs|Files|Drives|AllEntries ) )
60
"D:/Qt/myProjects/build-qt-Modules-core-Input_Output-QDir_and_others-Desktop_Qt_5_2_0_MinGW_32bit-Debug/一个新目录/test.txt" 
——————
dir()函数返回的是一个对象,比较复杂,其它比较容易理解

—————————————————————————————————————————————————————————————

QFileSystemWatcher直译为文件系统观察者,用于监视目录及文件的变化,它既可以用addPath()或addPaths()添加一个或多个目录路径,也可以用它们添加文件路径。反之,可用removePath()或removePaths()移除路径。它有两个主要信号:

voiddirectoryChanged(const
QString & path)//目录变化
voidfileChanged(const QString
& path)//文件变化
当所添加的文件路径的文件被修改、重命名或移除时,fileChanged()发送
当所添加的目录内的内容(文件夹与文件)被修改或移除时,directoryChanged发送

测试代码如下:

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QStringList>

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
watcher=new QFileSystemWatcher;
if(watcher->addPath("目录")&& watcher->addPath("目录/test1.txt"))//添加一个目录及文件路径
{
qDebug()<< watcher->directories();//返回监视的目录名即"目录"
qDebug()<< watcher->files();//返回所监视的文件名

}
connect(watcher,SIGNAL(directoryChanged(QString)),this,SLOT(m_directoryChanged(QString)));
connect(watcher,SIGNAL(fileChanged(QString)),this,SLOT(m_fileChanged(QString)));
}
void Dialog::m_directoryChanged(QString path)
{
qDebug()<<"目录路径:"<<path<<"变化";
}

void Dialog::m_fileChanged(QString path)
{
qDebug()<<"文件路径:"<<path<<"变化";
}

Dialog::~Dialog()
{
delete ui;
}


最终得到如下测试结果:

("目录")
("目录/test1.txt")
文件路径: "目录/test1.txt" 变化
目录路径: "目录" 变化
目录路径: "目录" 变化 

第一行与第二行是添加进的目录路径与文件路径,从连接的信号与槽可看出,信号的参数path指的是所监控的目录路径与文件路径,可用它识别是哪个发生变化

—————————————————————————————————————————————————————————————

QTemporaryDir与QTemporaryFile分别用于创建临时目录与文件

QTemporaryDir有如下方法:


Public Functions

 QTemporaryDir()
 QTemporaryDir(const QString
& templateName)
 ~QTemporaryDir()
boolautoRemove() const//判断是否自动删除目录
boolisValid() const//判断是否创建目录成功
QStringpath() const返回临时目录的路径
boolremove()移除目录
voidsetAutoRemove(bool b)设置是否自动移除,默认为true
使用时:

QTemporaryDir dir;
if (dir.isValid()) {
// dir.path() 返回唯一的目录路径
}


QTemporaryFile类似

—————————————————————————————————————————————————————————————
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: