我们如何在Linux中使用C语言读取目录的内容(子目录和文件名)。
这是一个递归程序递归地打印所有子目录和文件的名字。
用法:./a.out路径名
对于作为命令行参数提供的初始路径名,不检查错误条件。
代码的基本流程:
读取当前目录中的所有条目。
如果是目录名称,则将其名称添加到路径名称中,并且递归地调用该函数。
否则将打印文件的名称。
有关特定功能的细节可以在dmuir指出的各个手册页中引用:
#include<sys/stat.h> #include<unistd.h> #include<dirent.h> #include<error.h> int read(char *pth) { char path[1000]; strcpy(path,pth); DIR *dp; struct dirent *files; /*structure for storing inode numbers and files in dir struct dirent { ino_t d_ino; char d_name[NAME_MAX+1] } */ if((dp=opendir(path))==NULL) perror("dir\n"); char newp[1000]; struct stat buf; while((files=readdir(dp))!=NULL) { if(!strcmp(files->d_name,".") || !strcmp(files->d_name,"..")) continue; strcpy(newp,path); strcat(newp,"/"); strcat(newp,files->d_name); printf("%s\n",newp); //stat function return a structure of information about the file if(stat(newp,&buf)==-1) perror("stat"); if(S_ISDIR(buf.st_mode))// if directory, then add a "/" to current path { strcat(path,"/"); strcat(path,files->d_name); read(path); strcpy(path,pth); } } } int main(int argc,char *argv[]) { read(argv[1]); }
相关函数是opendir,readdir和closedir。 我推荐“男人操”等等
这里是代码,将这样做(从链接 ),希望它会让你开始你在找什么。
#include <ftw.h> #include <stdio.h> #include <sys/stat.h> int list(const char *name, const struct stat *status, int type); int main(int argc, char *argv[]) { if(argc == 1) ftw(".", list, 1); else ftw(argv[1], list, 1); return 0; } // FTW_F The object is a file // FTW_D ,, ,, ,, ,, directory // FTW_DNR ,, ,, ,, ,, directory that could not be read // FTW_SL ,, ,, ,, ,, symbolic link // FTW_NS The object is NOT a symbolic link and is one for // which stat() could not be executed int list(const char *name, const struct stat *status, int type) { if(type == FTW_NS) return 0; if(type == FTW_F) printf("0%3o\t%s\n", status->st_mode&0777, name); if(type == FTW_D && strcmp(".", name) != 0) printf("0%3o\t%s/\n", status->st_mode&0777, name); return 0; }
编辑:ftw是什么是用来行走的文件系统,关于它的更多信息请参阅其手册页ftw手册页