linux递归遍历⽂件⽬录⽂件内容,Linux下递归遍历⽬录和⽂件#include
#include
#include
#include
#include
void printdir(char *dir,int depth)
{
//打开⽬录指针
linux查看当前文件夹内容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; /* 最后状态改变时间 */
};

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。