博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下遍历目录
阅读量:6884 次
发布时间:2019-06-27

本文共 1592 字,大约阅读时间需要 5 分钟。

项目中需要遍历目录并对目录下的所有文件进行处理分析,于是先实现一下遍历目录的功能

实现代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 using namespace std;10 11 void traverseDir(char *pPath, int nDeepth);12 13 int main(int argc, char **argv)14 {15 for (int i = 1; i < argc; ++i)16 {17 traverseDir(argv[i], 0);18 }19 20 return 0;21 }22 23 void traverseDir(char *pPath, int nDeepth)24 {25 DIR *pDir = NULL;26 struct dirent *pSTDirEntry;27 char *pChild = NULL;28 29 30 if ((pDir = opendir(pPath)) == NULL)31 {32 return ;33 }34 else35 {36 while ((pSTDirEntry = readdir(pDir)) != NULL)37 {38 if ((strcmp(pSTDirEntry->d_name, ".") == 0) || (strcmp(pSTDirEntry->d_name, "..") == 0))39 {40 continue;41 }42 else43 {44 for (int i = 0; i < nDeepth; i++)45 {46 cout << "\t";47 }48 cout << pSTDirEntry->d_name << endl;49 50 if (pSTDirEntry->d_type & DT_DIR)51 {52 pChild = (char*)malloc(sizeof(char) * (NAME_MAX + 1));53 if (pChild == NULL)54 {55 perror("memory not enough.");56 return ;57 }58 memset(pChild, 0, NAME_MAX + 1);59 strcpy(pChild, pPath);60 strcat(pChild, pSTDirEntry->d_name);61 traverseDir(pChild, nDeepth + 1);62 free(pChild);63 pChild = NULL;64 }65 }66 }67 closedir(pDir);68 }69 }

此代码仅仅实现了遍历的功能,输出界面美观性没有考虑,而且也不太健壮,比如执行以下命令:

1 ./Dir ../2 ./Dir ..

第二行的就无法递归遍历文件夹,因为没有对路径结尾的/做处理。

使用到的函数是opendir、readdir、closedir,还有结构体dirent以及DIR

没有什么太难的地方,只是有一点需要注意,判断一个路径是不是目录应该使用pSTDirEntry->d_type & DT_DIR 判断相与的值是否等于零,不等于0则为目录

 

参考:http://blog.csdn.net/pengqianhe/article/details/8567955

你可能感兴趣的文章