[GNU/Linux]系统调用读取目录

dir.h

#ifndef _DIR_INFO_H
#define _DIR_INFO_H

// 《语法篇》的第30章,STL里的一个类模板
#include <vector>
using namespace std;

struct DirInfo
{
    char name[256];
};

int listdir(const char*  dir, vector<DirInfo>& results);


#endif

dir.cpp

#include <stdio.h>
#include <string.h>

#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>

#include "dir.h"

// 失败:返回-1;成功,返回0
int listdir(const char* dir, vector<DirInfo>& results)
{
    // 打开目录
    DIR *  _dir = opendir(dir);
    if(!_dir)
    {	
        return -1;
    }
    
    // 读取目录
    dirent* entry = readdir(_dir);
    while(entry)
    {
        const char* name = entry->d_name;
        if(strcmp(name, ".") != 0
            && strcmp(name, "..") != 0)
        {
            //printf("found entry: %s \n", name);
            DirInfo info;
            strcpy(info.name, name);
            results.push_back(info);
        }
        
        entry = readdir(_dir);
    }
    
    // 关闭目录
    closedir(_dir);
    return 0;

}

main.cpp

#include <stdio.h>

#include "dir.h"

int main()
{
    vector<DirInfo> results;
    int ret = listdir("/home/mytest/project/K12_02/aaa", results);
    if(ret == 0)
    {
        for(int i=0; i<results.size(); i++)
        {
            printf("got: %s \n", results[i].name);
        }	
    }	
    
    return 0;
}

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注