工作中经常用到遍历文件夹,下面的三个小函数可能会对您遍历文件夹提供一些思路,代码都是在linux下环境中测试通过的,Qt版和boost版理论上在windows也能编译通过,请自己测试使用。
一、linux C版
// 查找文件夹下的.XX格式的文件
list<string> getDirFile(const string dirPath,const char *extenStr)
{
list<string> filesNameList;
DIR *dir = opendir(dirPath.c_str());
dirent *pDirent = NULL;
while((pDirent = readdir(dir)) != NULL)
{
if(strstr(pDirent->d_name, extenStr) || strstr(pDirent->d_name, extenStr))
{
string pathFile = dirPath + string(pDirent->d_name);
filesNameList.push_back(pathFile);
}
}
closedir(dir);
return filesNameList;
}
二、boost版
#include <iostream>
#include <list>
#include <string>
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
using namespace boost::filesystem;
using namespace std;
// 根据路径和扩展名获得文件
list<string> getDirFile(const path &dir,const string extenStr)
{
list<string> filesList;
directory_iterator end;
for(directory_iterator pos(dir); pos!=end; pos++)
{
if(is_directory(*pos))
{
getDirFile(*pos,extenStr);
}
else
{
string filesName = pos->path().string();
if(pos->path().extension() == extenStr)
{
filesList.push_back(filesName);
}
}
}
return filesList;
}
int main(int argc, char *argv[])
{
list<string> filesList;
const path dir(initial_path());
const path curdir(current_path());
cout << "initial_path:" << initial_path() <<endl << "curDir:" << curdir<< endl;
const string extenStr = ".cpp";
filesList = getDirFile(dir,extenStr);
BOOST_FOREACH(auto str,filesList)
{
cout << "str:" << str << endl;
}
cout << "Hello World!" << endl;
return 0;
}
三、Qt版
// 根据路径和扩展名获得文件
QStringList getDirFile(const QString dirPath,const QString extenStr)
{
QStringList filesNameList;
QStringList filters;
filters << extenStr;
QDir dir(dirPath);
dir.setNameFilters(filters);
filesNameList = dir.entryList(filters);
m_fileNameList = filesNameList;
QStringList filePathList;
for(int i=0;i<filesNameList.count();i++)
{
QString path = dirPath + filesNameList.at(i);
filePathList.append(path);
}
return filePathList;
}