linux 递归显示目录文件,Linux下递归遍历目录和文件

Linux下递归遍历目录和文件:

#include

#include

#include

#include

#include

void printdir(char *dir,int depth)

{

//打开目录指针

DIR *Dp;

//文件目录结构体

struct dirent *enty;

//详细文件信息结构体

struct stat statbuf;

//打开指定的目录,获得目录指针

if(NULL == (Dp = opendir(dir)))

{

fprintf(stderr,"can not open dir:%s\n",dir);

return;

}

//切换到这个目录

chdir(dir);

//遍历这个目录下的所有文件

while(NULL != (enty = readdir(Dp) ))

{

//通过文件名,得到详细文件信息

lstat(enty->d_name,&statbuf);

//判断是不是目录

if(S_ISDIR(statbuf.st_mode))

{

//当前目录和上一目录过滤掉

if(0 == strcmp(".",enty->d_name) ||

0 == strcmp("..",enty->d_name))

{

continue;

}

//输出当前目录名

printf("%*s%s/\n",depth," ",enty->d_name);

//继续递归调用        printdir(enty->d_name,depth+4);

}

else

{      //输出文件名

printf("%*s%s\n",depth," ",enty->d_name);

}

}

//切换到上一及目录

chdir("..");

//关闭文件指针

closedir(Dp);

}

int main(int argc,char **argv)

{

char *topdir = "/home/administrator/桌面/test";

if(argc > 2)

{

printf("it is in here\n");

topdir = argv[1];

}

printf("Directory scan of %s\n",topdir);

printdir(topdir,0);

printf("Done\n");

exit(0);

}

struct dirent

{

long d_ino; /* inode number 索引节点号 */

off_t d_off; /* offset to this dirent 在目录文件中的偏移 */

unsigned short d_reclen; /* length of this d_name 文件名长 */

unsigned char d_type; /* the type of d_name 文件类型 */

char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长256字符 */

}

函数名: lstat

功 能: 获取一些文件相关的信息

用 法: int lstat(const char *path, struct stat *buf);

参数:

path:文件路径名。

filedes:文件描述词。

buf:是以下结构体的指针

struct stat {

dev_t st_dev; /* 文件所在设备的标识 */

ino_t st_ino; /* 文件结点号 */

mode_t st_mode; /* 文件保护模式 */

nlink_t st_nlink; /* 硬连接数 */

uid_t st_uid; /* 文件用户标识 */

gid_t st_gid; /* 文件用户组标识 */

dev_t st_rdev; /* 文件所表示的特殊设备文件的设备标识 */

off_t st_size; /* 总大小,字节为单位 */

blksize_t st_blksize; /* 文件系统的块大小 */

blkcnt_t st_blocks; /* 分配给文件的块的数量,512字节为单元 */

time_t st_atime; /* 最后访问时间 */

time_t st_mtime; /* 最后修改时间 */

time_t st_ctime; /* 最后状态改变时间 */

};0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值