linux下遍历文件夹下的文件

工作中经常用到遍历文件夹,下面的三个小函数可能会对您遍历文件夹提供一些思路,代码都是在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;
}

猜你喜欢

转载自blog.csdn.net/toby54king/article/details/80903327