#include <stdio.h>
#include <stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
#include<unistd.h>
#include<string.h>
int k=0;//当前层数
void f(char* p)
{
int i,j;
char *q=strrchr(p,'/');
for(i=0;i<2*k;i++)
printf(" ");
printf("+--%s\n",q+1);
DIR*dir;
struct stat buf;//用于保存文件信息并判断文件类型
char base[200];
struct dirent*ptr;
dir=opendir(p);//获取p目录下的所由文件和目录的列表,如果p是个文件则返回值为NULL
while((ptr=readdir(dir))!=NULL)//循环读取opendir 返回值的那个列表
{
if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)continue;
sprintf(base,"%s/%s",p,ptr->d_name);
stat((const char*)base,&buf);//将base中的文件信息保存在buf结构中
if(S_ISREG(buf.st_mode))//文件
{
for(j=0;j<i+2;j++)
printf(" ");
printf("--%s\n",ptr->d_name);
}
if(S_ISDIR(buf.st_mode))//目录
{
k++;
f(base);
}
}
close(dir);
--k;
};
int main(int argc,char *argv[])
{
f("D:/Codeblocks/CodeBlocks/c_practice");
return 0;
}