linux下opendir的使用

opendir:

作用:打开一个目录

头文件:

#include <sys/types.h>

#include <dirent.h>

函数原型

 DIR *opendir(const char *name);

描述/返回值:打开目录文件获取文件名为path的子目录下的所由文件和目录的列表,如果path是个文件则返回值为NULL

readdir:

头文件:

#include <dirent.h>

函数原型:

struct dirent *readdir(DIR *dirp);

描述:成功则返回下个目录进入点,返回本目录位置指针所指的文件并以结构体的方式返回. 有错误发生或读取到目录文件尾则返回NULL.

返回值:返回dirp文件下的一个文件的信息

struct dirent的定义

struct dirent
​
{
​
  ino_t d_ino; 文件的inode
​
  off_t d_off; 目录文件开头至此目录进入点的位移
​
  signed short int d_reclen;的长度, 不包含NULL 字符
​
  unsigned char d_type; 所指的文件类型 d_name 文件名
​
  char d_name[256];
​
};

closedir:

头文件

#include <sys/types.h>

#include <dirent.h>

函数原型

int closedir(DIR *dirp);

描述:关闭目录文件

返回值: 若函数执行成功,返回0;若失败,返回 -1

实列:

#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>

#deifne FILENAME_MAX 1024//文件名称最大字节数

//此函数为公式函数,也就是或这是万能函数,在任何项目中此函数都可以发挥作用
void do_ls(char *dirname,char filename[][FILENAME_MAX ],int *file_num)
{
	DIR *dir_ptr;//目录描述符
	struct dirent *direntp;
    *file_num = 0;//初始化文件个数
 
	dir_ptr = opendir(dirname);//打开目录
	if(dir_ptr == NULL)//打开目录失败
	{
		fprintf(stderr,"Ls: can not open %s",dirname);//报错
	}
	else //打开目录成功
	{
        while (1)
	    {
            direntp = readdir(dir_ptr);//读取目录
            if(direntp != NULL)//读取的数据不为空
            {
                // 在此处理子文件,如果是需要其他类型格式文件,需要在此加几个if分支
                if (direntp->d_type == DT_REG)//如果为普通文件格式
                {
                    strcpy(filename[*file_num],dirname);
                    strcat(filename[*file_num],"/");
                    strcat(filename[*file_num],direntp->d_name);
                    printf("%d : %s\n", *file_num,filename[*file_num]);
                    (*file_num)++;
                }
            }
            else
            {
                break;
            }
	    }
        closedir(dir_ptr);//关闭目录
	}
}

int main()
{
    char filename[20][FILENAME_MAX];//文件名称数组
    int file_num;//文件个数
    char dirname[128] = "file_dir";//目录名
    do_ls(dirname,filename,&file_num);
    printf("file_num = %d\n",file_num);//打印文件个数
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值