目录I/O

 

文件目录操作:先 opendir() 打开目录,然后再 chdir() 切换路径到目录下,再对目录进行相应的行为。

 

头文件:

#include <sys/types.h>	//-------
#include <dirent.h>	//------- opendir, closedir, readdir, rewinddir

#include <unistd.h>	//chdir

 

函数原型:

DIR *opendir(const char *name);		//打开目录

int closedir(DIR *dirp);		//关闭目录

int chdir(const char *path);		//切换目录

struct dirent *readdir(DIR *dirp);	//读取目录

void rewinddir(DIR *dirp);		//重置目录指针

 

函数参数详解:

DIR *opendir(const char *name);        //打开目录

name: 需要打开的目录的路径

返回值:
    成功: 目录流指针    -> 打开目录后,默认指向目录中最开头的一项!
    失败: NULL


int closedir(DIR *dirp);               //关闭目录

dirp: 目录流指针

返回值:
	成功:0
	失败:-1



int chdir(const char *path);        //切换目录

path: 需要切换的目录路径

返回值:
	成功:0
	失败:-1



struct dirent *readdir(DIR *dirp);    //读取目录

	dirp: 目录流指针

     返回值:
	成功:结构体指针   struct dirent *
	失败:NULL   -> 当目录读取完了,就会返回NULL。


//结构体内容
struct dirent {
               ino_t          d_ino;       //索引号
               off_t          d_off;       //偏移量
               unsigned short d_reclen;    //该目录项的名字长度   
               unsigned char  d_type;      //文件的类型
               char           d_name[256]; //文件的名字
};

d_type:
enum
  {
    DT_UNKNOWN = 0,  -> 未知类型
    DT_FIFO = 1,   -> 管道文件
    DT_CHR = 2,    -> 字符设备文件
    DT_DIR = 4,    -> 目录文件
    DT_BLK = 6,    -> 块设备
    DT_REG = 8,   -> 普通文件
    DT_LNK = 10,  -> 链接文件
    DT_SOCK = 12,  -> 套接字文件
  };





 

例子:

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
	//1. 打开目录
	DIR *dp = opendir("./dir");
	if(dp == NULL)
		printf("opendir error!\n");
	
	//2. 切换到目录下
	chdir("./dir");
	
	//3. 读取目录中每一项
	struct dirent *ep = NULL;
	while(1)
	{
		ep = readdir(dp);   //ep接着返回的文件信息
		if(ep == NULL)      //如果读完目录里的文件
			break;
			
		if(ep->d_name[0] == '.')    //目录里有  (.)文件 和 (..) 两个文件,过滤掉
			continue;
			
		printf("ep->d_ino = %d\n",(int)ep->d_ino);	
		printf("ep->d_off = %d\n",(int)ep->d_off);
		printf("ep->d_reclen = %d\n",ep->d_reclen);
		printf("ep->d_type = %d\n",ep->d_type);
		printf("ep->d_name = %s\n",ep->d_name);
		printf("================================\n");	

				
	}

	//4. 关闭目录
	closedir(dp);
	
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值