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

Qt上获取指定目录下或者及其子目录下各文件或者子目录的全路径

2018-01-22 17:16 555 查看
在做一个项目的时候,需要获取一个指定的文件夹下的所有子文件夹下的所有文件的全路径,这样将所有文件的绝对路径取到,然后对这些文件进行处理。

在发现没有相关的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

4000
* @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进来的路径和构造函数进来的路径的代码,但是显而易见非常容易,写几个没有参数的同样的方法名,然后在其函数内部进行对上面函数的调用即可实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐