我是靠谱客的博主 勤恳柚子,最近开发中收集的这篇文章主要介绍Qt上获取指定目录下或者及其子目录下各文件或者子目录的全路径,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在做一个项目的时候,需要获取一个指定的文件夹下的所有子文件夹下的所有文件的全路径,这样将所有文件的绝对路径取到,然后对这些文件进行处理。
在发现没有相关的Qt自带的函数后,自己写了如下的函数。
头文件:

#ifndef ALLFILESORPATHINDIR_H
#define ALLFILESORPATHINDIR_H
#include <QString>
#include <QStringList>
class AllFilesOrPathInDir
{
public:
AllFilesOrPathInDir();
/**
* @brief AllFilesOrPathInDir
构造函数
* @param dirPath
目录的路径
*/
AllFilesOrPathInDir(QString dirPath);
/** 设置目录
* @brief setDirPath
* @param dirPath
目标文件夹的目录
*/
void
setDirPath(QString dirPath);
/** 获取指定目录下的文件路径+名称
* @brief getFilePathNameOfSplDir
* @param dirPath
目标文件夹的目录
* @return
*/
QStringList
getFilePathNameOfSplDir(QString dirPath);
/** 获取在指定目录下的目录的路径
* @brief getDirPathOfSplDir
* @param dirPath
* @return
*/
QStringList
getDirPathOfSplDir(QString dirPath);
/** 获取指定目录下的文件和目录的全路径
* @brief getFileAndDirPathNameOfSplDir
* @param dirPath
* @return
*/
QStringList
getFileAndDirPathNameOfSplDir(QString dirPath);
/** 在指定文件夹下的文件数
* @brief fileConutInSplDir
* @param dirPath
* @return
*/
int
fileConutInSplDir(QString dirPath);
/** 在指定文件夹下的目录数
* @brief dirCountInSplDir
* @param dirPath
* @return
*/
int
dirCountInSplDir(QString dirPath);
/** 获取指定目录及其子目录下文件的全路径
* @brief getFilePathNameOfSplAndChildDir
* @param dirPath
* @return
*/
QStringList
getFilePathNameOfSplAndChildDir(QString dirPath);
/** 获取指定目录及其子目录下的文件夹的全路径
* @brief getDirPathOfSplAndChildDir
* @param dirPath
* @return
*/
QStringList
getDirPathOfSplAndChildDir(QString dirPath);
/** 获取指定目录及其子目录下的文件与目录的全路径
* @brief getFileAndDirPathNameOfSplAndChildDir
* @param dirPath
* @return
*/
QStringList
getFileAndDirPathNameOfSplAndChildDir(QString dirPath);
private:
QString dirPath;
};
#endif // ALLFILESORPATHINDIR_H

源文件:

#include "AllFilesOrPathInDir.h"
#include <QFileInfo>
#include <QFileInfoList>
#include <QDir>
#include <QDebug>
AllFilesOrPathInDir::AllFilesOrPathInDir()
{
}
AllFilesOrPathInDir::AllFilesOrPathInDir(QString dirPath)
{
this->dirPath = dirPath;
testCode();
}
void AllFilesOrPathInDir::setDirPath(QString dirPath)
{
this->dirPath = dirPath;
}
QStringList AllFilesOrPathInDir::getFilePathNameOfSplDir(QString dirPath)
{
QStringList filePathNames;
QDir splDir(dirPath);
QFileInfoList fileInfoListInSplDir = splDir.entryInfoList(QDir::Files);
QFileInfo tempFileInfo;
foreach (tempFileInfo, fileInfoListInSplDir) {
// absoluteFilePath()
-- 截取到的是文件夹的路径
// absolutePath()
-- 截取的是文件夹所在路径
filePathNames << tempFileInfo.absoluteFilePath();
}
return filePathNames;
}
QStringList AllFilesOrPathInDir::getDirPathOfSplDir(QString dirPath)
{
QStringList dirPaths;
QDir splDir(dirPath);
QFileInfoList fileInfoListInSplDir = splDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
QFileInfo tempFileInfo;
foreach (tempFileInfo, fileInfoListInSplDir) {
dirPaths << tempFileInfo.absoluteFilePath();
}
return dirPaths;
}
QStringList AllFilesOrPathInDir::getFileAndDirPathNameOfSplDir(QString dirPath)
{
QStringList fileAndDirPathNames;
fileAndDirPathNames << getFilePathNameOfSplDir(dirPath);
fileAndDirPathNames << getDirPathOfSplDir(dirPath);
return fileAndDirPathNames;
}
int AllFilesOrPathInDir::fileConutInSplDir(QString dirPath)
{
return QDir(dirPath).entryList(QDir::Files).count();
}
int AllFilesOrPathInDir::dirCountInSplDir(QString dirPath)
{
return QDir(dirPath).entryList(QDir::Dirs | QDir::NoDotAndDotDot).count();
}
QStringList AllFilesOrPathInDir::getFilePathNameOfSplAndChildDir(QString dirPath)
{
QStringList filePathNames;
// 首先,得到这个目录下面的文件全部
filePathNames << getFilePathNameOfSplDir(dirPath);
QStringList childDirs;
childDirs << getDirPathOfSplDir(dirPath);
QString tempChildDir;
foreach (tempChildDir, childDirs) {
// 取其子文件夹内容
filePathNames << getFilePathNameOfSplAndChildDir(tempChildDir);
}
return filePathNames;
}
QStringList AllFilesOrPathInDir::getDirPathOfSplAndChildDir(QString dirPath)
{
QStringList dirPathNames;
dirPathNames << getDirPathOfSplDir(dirPath);
QString tempChildDir;
foreach (tempChildDir, dirPathNames) {
dirPathNames << getDirPathOfSplAndChildDir(tempChildDir);
}
return dirPathNames;
}
QStringList AllFilesOrPathInDir::getFileAndDirPathNameOfSplAndChildDir(QString dirPath)
{
QStringList fileAndDirPathNames;
fileAndDirPathNames << getFilePathNameOfSplDir(dirPath);
QStringList childDirs;
childDirs << getDirPathOfSplDir(dirPath);
QString tempChildDir;
foreach (tempChildDir, childDirs) {
fileAndDirPathNames << tempChildDir;
// 取其子文件夹内容
fileAndDirPathNames << getFileAndDirPathNameOfSplAndChildDir(tempChildDir);
}
return fileAndDirPathNames;
}

在上面的代码里面没有写对默认set进来的路径和构造函数进来的路径的代码,但是显而易见非常容易,写几个没有参数的同样的方法名,然后在其函数内部进行对上面函数的调用即可实现。

最后

以上就是勤恳柚子为你收集整理的Qt上获取指定目录下或者及其子目录下各文件或者子目录的全路径的全部内容,希望文章能够帮你解决Qt上获取指定目录下或者及其子目录下各文件或者子目录的全路径所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部