linux c遍历文件夹 和文件查找的方法

linux c遍历文件夹的方法比较简单,使用c来实现

#include <iostream>
#include <stdio.h>

#include <sys/types.h>
#include <dirent.h>
#include <sys/dir.h>
#include <sys/stat.h>

...
enum
{
    DT_UNKNOWN = 0,     //未知类型
    DT_FIFO = 1,        //管道
    DT_CHR = 2,         //字符设备文件
    DT_DIR = 4,         //目录
    DT_BLK = 6,         //块设备文件
    DT_REG = 8,         //普通文件
    DT_LNK = 10,        //连接文件
    DT_SOCK = 12,       //套接字类型
    DT_WHT = 14         //
};
void loopDir(const char *dir_path) { 
  char temp[256] = {0};
  struct dirent *pdirent;
DIR
*d_info = opendir(dir_path); if (d_info) { while ((pdirent = readdir(d_info)) != NULL) { if (pdirent->d_type & DT_REG) { //普通文件 } if (pdirent->d_type & DT_DIR) { //目录,递归 } } } } ...

 

在类Unix或linux (OSX,iOS,Android系统)下面搜索某一类型的文件可以用OgreSearchOps来使用,非常方便,对应 win32 则需要另外一套机制

 

// 头文件引用部分
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    #include <io.h>
#else
    #include <unistd.h>
    #include <stdio.h>
    #include <dirent.h>
    #include <sys/stat.h>

    #include "OgreSearchOps.h"
#endif


void MfindFiles(const std::string &dir_path,const std::string &partten,std::vector<std::string> &arr)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    _finddata_t FileInfo;
    string strfind = dir_path + "\\" + partten;
    long Handle = _findfirst(strfind.c_str(), &FileInfo);
    
    if (Handle == -1L)
    {
        exit(-1);
    }
    do{
        if (FileInfo.attrib & _A_SUBDIR)
        {
        }
        else
        {
            string filename = (dir_path + "\\" + FileInfo.name);
            arr.push_back(FileInfo.name);
        }
    }while (_findnext(Handle, &FileInfo) == 0);
    
    
    _findclose(Handle);
#else
    findFiles(dir_path, partten, false, false, &arr);
#endif
}

// 测试  搜索所有的.plist 后缀名文件
    std::vector<std::string> plist_file_list;
    MfindFiles(effect_path, "*.plist",plist_file_list);

 

posted @ 2015-01-09 16:47  haroel  阅读(3600)  评论(0编辑  收藏  举报