Linux遍历目录实现 tree功能

Linux目录遍历主要分为三步

  • 打开目录
  • 读取目录
  • 关闭目录



#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
#define args_check(argc,num) {if(argc!=num) {printf("error args\n");return -1;}}

//目录深度优先遍历
void printdir(char * dirname,int width)  //递归调用自己
{
    DIR *pdir;  //定义DIR类型变量这是opendir的返回值
    pdir=opendir(dirname); //打开目录
    if(NULL==pdir) //若传参不正确
    {
        perror("opendir"); //返回opdir错误在哪里
        return;
    }
    struct dirent *p; //定义dirent类型指针为了获取某文件夹目录内容,所使用的结构体
    char path[512]={0}; //定义目录字符串
    
    while((p=readdir(pdir))!=NULL) //readdir读取目录的返回值为一个dirent类型的指针
    {
        if(!strcmp(p->d_name,".")||!strcmp(p->d_name,"..")) 
        {
            continue; //跳过当前目录和上一级目录,避免无限循环
        }
        printf("%*s%s\n",width,"",p->d_name); //printf 打印空格
        if(p->d_type==4)  //d_type的枚举类型值表示一个类型4是目录,0是未知,1是管道,2是字符设备,8表示文件,6是块设备
        {
            sprintf(path,"%s%s%s",dirname,"/",p->d_name);//sprintf将三个字符串拼接起来
            printdir(path,width+4); //递归调用自己,下一层目录前面打印空格多4个
        }
    }
    closedir(pdir);
}

int main(int argc,char *argv[])
{
    args_check(argc,2); //此处定义为宏,判断传入参数
    printf("%s\n",argv[1]); //打印传入目录
    printdir(argv[1],4); //调用递归函数
    return 0;
}

磁盘删除只是删除了dirent信息 除非下一次再写入文件到那个位置的时候就会

文件剪切只是创建了一个硬链接和copy有很大不同,速度快的多

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,305评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,000评论 0 5
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,972评论 0 9
  • 第一章 1.Linux是一套免费使用和自由传播的类UNIX操作系统,它可以基于Intel x86系列处理器以及Cy...
    yansicing阅读 10,816评论 0 9
  • Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本...
    偷风筝的人_阅读 8,495评论 1 17

友情链接更多精彩内容