#include<stdio.h> //标准输入输出 #include<unistd.h> //各种系统调用 #include<dirent.h> //与目录有关的操作 #include<string.h> //与字符串处理有关的函数 #include<sys/stat.h> //与文件状态有关 #include<sys/types.h>//linux系统自定义的类型 void show_directory(char * dir_name,int level); int main(int argc, char * argv[]) { if(argc != 2) { fprintf(stdout,"%s\n","参数输入有问题!"); return 1; } show_directory(argv[1],0); return 0; } /*用于显示目录 * 第一个参数为目录的名称 * 第二个参数为目录为几及目录 * */ void show_directory(char * dir_name,int level) { DIR * dir; //目录流指针 struct dirent * entry; //目录项结构体指针 struct stat statbuf; if( ( dir = opendir(dir_name) ) == NULL ) return ; chdir(dir_name); char cwd[100]; getcwd(cwd,100); int dir_name_len; dir_name_len = strlen(dir_name); fprintf(stdout,"%*s文件夹中:\n",level + dir_name_len,dir_name); while( ( entry = readdir(dir) ) != NULL ) { lstat(entry->d_name,&statbuf); //如果是目录,就第归调用 if( S_ISDIR (statbuf.st_mode) ) { if( strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0) { continue; } int level2; level2 = level + dir_name_len + 10; //计算出空格数 show_directory(entry->d_name,level2); } else if( S_ISREG(statbuf.st_mode) ) //如果是文件,输出 { int length = level + (int)strlen(entry->d_name) + dir_name_len + 10; //子段应有占的长度 fprintf(stdout,"%*s\n",level + (int)strlen(entry->d_name) + dir_name_len + 10,entry->d_name); } } chdir(".."); closedir(dir); }