C语言C++,dirent自创ddir结构体,实现更便捷的文件夹操作

本文介绍了如何通过自定义的ddir结构体来封装C语言和C++中的dirent库,实现更方便的文件夹操作。ddir结构体包括了路径、文件类型等信息,简化了路径拼接、点点处理和类型判断的过程,提供了一键获取完整路径和文件类型的功能。
摘要由CSDN通过智能技术生成

C语言,C++的文件夹操作常见的只有opendir(),readdir(),closedir(),rewinddir(),在<dirent.h>中有DIR,struct dirent两个结构体,对系统fcntl进行复杂操作,最后就给出个d_name名字能看懂(linux还有d_type)

 

每次使用dirent时常常需要把路径拼接起来,跳过最前面的两个“文件夹”:.(本身)和..(上级文件夹),windows还需要stat判断文件类型。

这样复杂的处理代码,用一次dirent就得写一次,还很冗余,散架易错。我们需要一套半自动处理结构,简化代码,减轻应用层负担。于是我个人写了ddir包装体,实现一键拼路径、调点点、判断类型。

 

struct _ddir {

  char* _path; 含完整路径结果

  int _catPos; strcpy位置

  short _flag;

  short d_type; windows还能算type

  char* d_name; 与struct dirent同名兼容,放心替换

  DIR* _dir;

};

typedef struct _ddir ddir;

 

常见的dirent使用方法如下:

void func(void)(整体标记)

{ const char* pathdir="/storage/emulated/0/";(斜杠结尾)

char pathbuf[256];

strcpy(pathbuf,pathdir);

strcat(pathbuf,ent->d_name);

然后pathbuf才是完整路径,才能用。

对于Windows,struct dirent中没有d_type,难以区分文件还是文件夹,就要stat(),毕竟dirent全称是directory entry(文件夹入口)。

struct stat st;

if(stat(pathbuf,&st)==0)

{ if(S_ISDIR(st.st_mode)) type=4 //文件夹

  if(S_ISREG(st.st_mode)) type=8 //文件

} ...

}

我的ddir半自动工作原理:

void* myreaddir(x)

{ retptr=readdir(x);

  func();

  return retptr;

}

 

这就叫包装,使得将来的功能使用更简洁,这就值得。自己动手,丰衣足食。于是我把自创源码免费分享给大家,用就拿走。欢迎讨论意见,给变量取个更好听的名字。

 

如果对您有帮助,点个赞可以让更多人看到~

 

#ifndef _DDIR_H //Writer: Dexam
#define _DDIR_H //Date: 2022.4.23
#include <dirent.h>
#include <stdlib.h> //m

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值