Linux C编写的列出文件树形结构的程序

采用递归算法编写,类似于DOS下的“tree”命令



#include<stdlib.h>
#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值