Qt中的文件及文件夹操作
作为笔记整理,也方便以后查看。
Qt中涉及到文件与文件夹的主要有如下类(慢慢补充):
- QDir:提供了访问系统目录结构及其内容的与平台无关的方式
- QFile:提供从文件读取和写入文件的接口
- QFileInfo:提供与系统无关的文件信息
1. 获取文件夹下的文件
获取文件夹或者文件,主要通过QDir类中的两个函数
//返回目录中所有文件和目录的名称列表 QStringList QDir::entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
//返回该目录中所有文件和目录的QFileInfo对象列表 QFileInfoList QDir::entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
两者都可以设置相应的筛选条件
1.1 获取目录中文件和目录的名称列表
1.1.1 不加任何筛选条件
QDir dir(QDir::currentPath());
qDebug()<<dir.entryList();
结果如下:
(".", "..", ".qmake.stash", "debug", "Makefile", "Makefile.Debug", "Makefile.Release", "release", "ui_mainwindow.h")
注意:其中有两个特殊项目:".", “…”,一般情况下要主动去掉,去掉的方式为在筛选器中加入QDir::NoDotAndDotDot
1.1.2 获取满足指定条件的信息
//只获取后缀为.h的文件
QDir dir(QDir::currentPath());
qDebug()<<dir.entryList(QStringList()<<"*.h", QDir::NoDotAndDotDot | QDir::Files);
1.1.3 使用递归获取文件夹下所有符合条件的文件,包括子文件夹
QStringList findFiles(QString objDir, QStringList filters)
{
QStringList fileNames;
QDir dir(objDir);
//当前文件夹下的文件
foreach (QString file, dir.entryList(filters, QDir::Files)) {
fileNames.append(objDir + "/" + file);
}
//当前文件夹下的子文件夹
foreach (QString subdir, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)) {
fileNames.append(findFiles(objDir + "/" + subdir, filters));
}
return fileNames;
}
QStringList fileNames = findFiles("./", QStringList() << "*.h");
1.2 获取目录中所有文件和目录的QFileInfo对象列表、详细信息
QFileInfo类提供与系统无关的文件信息,在需要获取较详细或者特殊条件的文件信息时,QFileInfo就比较好用。比如判断文件是否存在,获取文件的绝对路径,获取文件的名称不带后缀等。
1.2.1 获取目录下所有文件的名字(不包括后缀)
QStringList getBaseNames(QString objDir)
{
QStringList baseNames;
QDir dir(objDir);
foreach (QFileInfo info, dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot)) {
baseNames.append(info.baseName());
}
return baseNames;
}
QStringList baseNames = getBaseNames("./");
1.2.2 获取目录下所有文件的绝对路径
QStringList getAbsoluteFilePath(QString objDir)
{
QStringList absoluteFilePaths;
QDir dir(objDir);
foreach (QFileInfo info, dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot)) {
absoluteFilePaths.append(info.absoluteFilePath());
}
return absoluteFilePaths;
}
QStringList absoluteFilePaths = getAbsoluteFilePath("./");