采用递归算法编写,类似于DOS下的“tree”命令
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<dirent.h>
int i;
int deep;
int cfil;
int cdir;
int hkg()
{
for (i=0;i<deep;i++)
{
printf(" ");
}
return 0;
}
int digui(char *x)
{
DIR *dp;
struct dirent *dirp;
dp = opendir(x);
if(dp == NULL)
{
perror("Open dir error");
printf("%s\n",x);
exit(1);
}
deep++;
while((dirp = readdir(dp)) != NULL)
{
if((strcmp(dirp->d_name, ".") == 0) || (strcmp(dirp->d_name, "..") == 0))
continue;
if(dirp->d_type == DT_DIR)
{
hkg();
printf("%s <d>\n", dirp->d_name);
cdir++;
char ch[strlen(x)+strlen(dirp->d_name)+1];
strcpy(ch,x);
strcat(ch,"/");
strcat(ch,dirp->d_name);
digui(ch);
}
else
{
hkg();
printf("%s <f>\n", dirp->d_name);
cfil++;
}
}
closedir(dp);
deep--;
return 0;
}
int main(int argc, char **argv)
{
if(argc != 2)
{
printf("Not enough arguments!\n");
exit(1);
}
else
{
printf("%s\n", argv[1]);
deep=0;
cfil=0;
cdir=0;
digui(argv[1]);
printf("There are %d directioaries, and %d files in '%s'.\n", cdir,cfil,argv[1]);
}
return 0;
}