linux遍历目录及其子目录

1 在linux下遍历某一目录下内容LINUX下历遍目录的方法一般是这样的
2 打开目录->读取->关闭目录
3 相关函数是opendir -> readdir -> closedir,其原型如下:
4 #include
5 DIR *opendir(const char *dirname);
6 struct dirent *readdir(DIR *dirp);
7 int closedir(DIR *dirp);

1 dirent结构体定义:
struct dirent {    
ino_t          d_ino;          
off_t          d_off;         
unsigned short d_reclen;        
unsigned char  d_type;          
char           d_name[256];
};

其中inode表示存放的是该文件的结点数目(具体可了解linux下的文件系统),d_off 是文件在目录中的编移,这两个基本很少用。

d_type表示档案类型:
enum

     DT_UNKNOWN = 0, 
# define DT_UNKNOWN DT_UNKNOWN 
     DT_FIFO = 1, 
# define DT_FIFO DT_FIFO 
     DT_CHR = 2, 
# define DT_CHR DT_CHR 
     DT_DIR = 4, 
# define DT_DIR DT_DIR 
     DT_BLK = 6, 
# define DT_BLK DT_BLK 
     DT_REG = 8, 
# define DT_REG DT_REG 
     DT_LNK = 10, 
# define DT_LNK DT_LNK 
     DT_SOCK = 12, 
# define DT_SOCK DT_SOCK 
     DT_WHT = 14 
# define DT_WHT DT_WHT 
}; 
 
d_reclen认为是纪录的长度,计算方式应该是4(d_ino)+4(d_off)+2(d_reclen)+1(d_type)+1(补齐位)+4N(d_name会自动补齐:
1.jpg为8,12.jpg也为8,1234.jpg也为8,12345.jpg则为12);所以一般d_reclen是20和24(其中.和..是16)。
 
d_name表示文件名,如test.jpg

unsigned char d_type,文件或目录的类型。它有可能的取值如下:
DT_UNKNOWN,未知的类型
DT_REG,普通文件
DT_DIR,普通目录
DT_FIFO,命名管道或FIFO
DT_SOCK,本地套接口
DT_CHR,字符设备文件
DT_BLK,块设备文件

linux C 遍历目录及其子目录 举例:

#include <stdio.h>  
#include <string.h> 
#include <stdlib.h>  
#include <dirent.h>  
#include <sys/stat.h>  
#include <unistd.h>  
#include <sys/types.h> 
#include <iostream>

 
using namespace std;
void listDir(char *path)  
{  
	DIR		*pDir;  	
	struct dirent	*ent; 
	int		i=0;  
	char		childpath[512];  
 
	pDir=opendir(path); 
	memset(childpath,0,sizeof(childpath)); 

	while((ent=readdir(pDir))!=NULL){  
		if(ent->d_type & DT_DIR){  
			if(strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0)  
				continue;  
			sprintf(childpath,"%s/%s",path,ent->d_name);
			printf("path:%s\n",childpath);  
			listDir(childpath);
		}  
		else{
			cout<<ent->d_name<<endl; 
		}
	}  
}  
   
int main(int argc,char *argv[])  
{  
	listDir(argv[1]); 
	return 0;  
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值