遍历文件夹内的文件 实例代码

来源:互联网 发布:矩阵的秩和方程组的解 编辑:程序博客网 时间:2024/06/07 04:00

相关函数:open, readdir, closedir, rewinddir, seekdir, telldir, scandir

头文件:#include <sys/types.h>   #include <dirent.h>定义函数:DIR * opendir(const char * name);函数说明:opendir()用来打开参数name 指定的目录, 并返回DIR*形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值.返回值:成功则返回DIR* 型态的目录流, 打开失败则返回NULL.错误代码:1、EACCESS 权限不足。2、EMFILE 已达到进程可同时打开的文件数上限。3、ENFILE 已达到系统可同时打开的文件数上限。4、ENOTDIR 参数name 非真正的目录。5、ENOENT 参数name 指定的目录不存在, 或是参数name 为一空字符串。6、ENOMEM 核心内存不足。

示例:

int get_file_count(char *dir_name){    DIR *dir;    struct dirent * ptr;    int total = 0;    char path[MAX];    dir = opendir(root); /* 打开目录*/    if (dir == NULL) {        perror("fail to open dir");        exit(1);    }    errno = 0;    while ((ptr = readdir(dir)) != NULL) {        //顺序读取每一个目录项;        //跳过“..”和“.”两个目录        if (strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0) {            continue;        }        //printf("%s%s/n",root,ptr->d_name);        //如果是目录,则递归调用 get_file_count函数        if(ptr->d_type == DT_DIR) {            sprintf(path,"%s%s/",root,ptr->d_name);            //printf("%s/n",path);            total += get_file_count(path);        }        if(ptr->d_type == DT_REG) {            total++;            printf("%s%s/n",root,ptr->d_name);        }    }    if (errno != 0) {        printf("fail to read dir");  //失败则输出提示信息        exit(1);    }    closedir(dir);    return total;}int main(int argc, char * argv[]){    int total;    if(argc != 2)    {    printf("wrong usage/n");    exit(1);    }    total = get_file_count(argv[1]);    printf("%s ha %d files/n",argv[1],total);    return 0;}
0 0
原创粉丝点击