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);//打印文件个数
}