1. 程式人生 > >Linux C 讀取文件夾下所有文件(包括子文件夾)的文件名(轉)

Linux C 讀取文件夾下所有文件(包括子文件夾)的文件名(轉)

文件中 其中 文件類型 sizeof basepath 文件 lose sed int

Linux C 下面讀取文件夾要用到結構體struct dirent,在頭#include <dirent.h>中,如下:

1 #include <dirent.h>
2 struct dirent
3 {
4    long d_ino; /* inode number 索引節點號 */
5    off_t d_off; /* offset to this dirent 在目錄文件中的偏移 */
6    unsigned short d_reclen; /* length of this d_name 文件名長 */
7    unsigned char d_type; /*
the type of d_name 文件類型 */ 8 char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最長255字符 */ 9 }

其中d_type表明該文件的類型:文件(8)、目錄(4)、鏈接文件(10)等。

下面程序,遞歸讀取某文件夾及其子文件夾下所有文件名:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
int
readFileList(char *basePath) { DIR *dir; struct dirent *ptr; char base[1000]; if ((dir=opendir(basePath)) == NULL) { perror("Open dir error..."); exit(1); } while ((ptr=readdir(dir)) != NULL) { if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"
..")==0) ///current dir OR parrent dir continue; else if(ptr->d_type == 8) ///file printf("d_name:%s/%s\n",basePath,ptr->d_name); else if(ptr->d_type == 10) ///link file printf("d_name:%s/%s\n",basePath,ptr->d_name); else if(ptr->d_type == 4) ///dir { memset(base,\0,sizeof(base)); strcpy(base,basePath); strcat(base,"/"); strcat(base,ptr->d_name); readFileList(base); } } closedir(dir); return 1; } int main(void) { DIR *dir; char basePath[1000]; //get the current absoulte path memset(basePath,\0,sizeof(basePath)); getcwd(basePath, 999); printf("the current dir is : %s\n",basePath); //get the file list //memset(basePath,‘\0‘,sizeof(basePath)); //strcpy(basePath,"./XL"); readFileList(basePath); return 0; }

執行輸出 :

技術分享

Linux C 讀取文件夾下所有文件(包括子文件夾)的文件名(轉)