Linux C语言遍历目录结构

遍历目录结构查找文件是很常用的功能,今天介绍一下使用Linux C 遍历Linux目录结构的方法:

  linux提供几个系统调用,以便于直接目录的读取和操作:

  DIR * opendir(const char * pathname);

  struct dirent * readdir(DIR * dir_handle);

  int closedir(DIR * dir);

  int stat(const char *file_name, struct stat *buf);

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <dirent.h>          //包含目录操作的相关函数

/**
* @Param pathname 要遍历的目录全路径名称
* @Param depth 当前的遍历等级,初始为0
*/
void printdir(const char * pathname, const int depth)
{
DIR * dir;
struct dirent * de;
struct stat fs;
int i = 0; if((dir = opendir(pathname)) == NULL)
{
printf("open dir %s error \r\n", pathname);
return;
} chdir(pathname);
while((de = readdir(dir)) != NULL)
{
if(strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0){continue;} if(stat(de->d_name, &fs) == -1){perror("fstat error");continue;} if(S_ISDIR(fs.st_mode))
{
              /**
               * 如果当前路径是目录,就递归调用printdir函数
              */
for(i=0;i<depth;++i){printf(" ");}
printf("%s\r\n", de->d_name);
printdir(de->d_name, depth + 4);
}
else
{
for(i=0;i<depth;++i)
{
printf(" ");
} printf("%s\r\n", de->d_name);
}
}
chdir("..");
closedir(dir); return;
} int main(int argc, char ** argv)
{
printdir("/root/projects", 0); return 0;
}

Linux 自带的目录遍历函数

int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b),

int ( * compare )( const struct dirent **, const struct dirent ** ) );
int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);

具体函数使用方法见man

上一篇:Unity 2D游戏开发教程之游戏精灵的开火状态


下一篇:python编码详解--转自(Alex的博客)