文件目录操作:先 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;
}