完成如下目标:
给定一个目录文件,打印该目录下所有子目录和文件的名称,并不断递归访问子目录,并打印其属子目录和文件名称
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
#include<unistd.h>
#include<iostream>
using namespace std;
static int n=-1;
//输出标识符的个数
void type()
{
int i;
for(i=0;i<n;i++)
{
cout<<"----";
}
}
//标识符输出函数
void display(char *d)
{
n++;
//进入更深一层是多输出标识符
char p[100];
struct stat statBuf;
DIR *dir;
struct dirent *dirp;
if(!(dir=opendir(d)))
{
perror("open fail:");
exit(-1);
}
//打开d代表的目录
while((dirp=readdir(dir))!=NULL)
{//循环遍历目录下所有项
if(dirp->d_name[0]=='.')
{
continue;
}
type();
//输出层标识符
sprintf(p,"%s/%s",d,dirp->d_name);
//展示目录
lstat(p,&statBuf);
//获取文件标识符等
if(S_ISDIR(statBuf.st_mode))
{//如果是目录,则迭代
cout<<"dir"<<dirp->d_name<<endl;
display(p);
}
else
{//不是目录,输出
cout<<"file:"<<dirp->d_name<<"\t"<<statBuf.st_ino;
}
}
n--;
}
int main()
{
char * a = "";
cout<<a<<endl;
display(a);
return 0;
}//测试代码
代码效果展示: