Linux下读取目录文件

使用opendir、readdir、closedir分别打开目录、读取目录和关闭目录

//需要的头文件
#include <dirent.h>
#include <sys/types.h>


//打开指定目录opendir得到目录句柄
DIR *dir = opendir(filepath);


//struct dirent结构体变量,用来存储子目录项
struct dirent *entry;


//然后通过while循环不断readdir,获取目录中的内容
while ((entry = readdir(dir)) != 0) {

    //获取该结构体变量的成员函数d_name就得到了待扫描的文件,然后在使用sprintf函数加入文件绝对路径
	printf("%s\n",entry->d_name);
    char* newpath;
    sprintf(newpath, "%s%s", filepath, entry->d_name);
    printf("%s\n",newpath);
    
}

//最后关闭目录句柄closedir
closedir(dir);

 

扩展:

1. dirent结构体的内容如下

Struct dirent
{

    ino_t d_ino; //索引节点号

    ff_t d_off; //在文件目录中的偏移

    unsigned short int d_reclem; //d_name的长度,不包含NULL字符

    unsigned char d_type; //d_name所指的文件类型

    char d_name[256]; //文件名
};



其中d_type中各个数字表示的文件类型如下,获取到结构体变量后,可使用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
};

2. readdir函数获取的是目录下所有文件,包含:.(点,指向当前目录)和 ..(点点,指向父目录)。创建新目录时会自动创建这两个文件名。

但以 .(点)开头命名的文件会隐藏,所以 ls 命令的结果中没有这两个文件名。

使用 ls -a 命令显示当前目录下的所有文件及文件夹包括隐藏的.和..等
        ls -l //显示不隐藏的文件与文件夹的详细信息
        ls -al //显示当前目录下的所有文件及文件夹包括隐藏的.和..等的详细信息

若忽略readdir结果中的 . 和 .. 文件名,可使用如下方法

if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, ".."))
    continue;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值