目录操作(C语言)

目录操作(C语言)

头文件:
  • #include<unistd.h>
  • #include<sys/stat.h>
  • #include<dirent.h>
读取目录

需要的头文件:#include<dirent.h>

  • 打开目录,在失败的时候返回一个空的指针。

    DIR * opendir(const char *path)

  • 读取目录readdir,readdir相当于文件操作函数read,DIR结构体相当于文件操作里面的FILE结构体。

    struct dirent *readdir(DIR *pDir)

    dirent 结构体:

    struct dirent
      {
    
      long d_ino; /* inode number 索引节点号 */ off_t d_off; /* 在目录文件中的偏移 */ unsigned short d_reclen; /* 文件名长 */ unsigned char d_type; /* 文件类型 */ char d_name [NAME_MAX+1]; /*文件名,最长256字符 */ }
  • 关闭目录

    int closedir(DIR *pDir)

创建目录:

int mkdir(const char *path, mode_t mode)

删除目录:

int rmdir(char *path)

获取当前目录绝对路径:
  • char * getcwd(char *path, size_t size)

    getcwd成功则返回当前工作目录,失败返回 FALSE

    参数:将当前工作目录的绝对路径复制到参数path所指的内存空间中,参数size为path的空间大小。

设置path为当前工作目录,需要对目录有x权限:

chdir(char *path)

设置fd对应的目录为当前工作目录:

fchdir(int fd)

例子:

#include<stdio.h>
#include<string.h> #include<sys/stat.h> #include<sys/types.h> #include<unistd.h> #include<errno.h> #include<dirent.h> int GetFileType(char *filePath,char *type) { if(filePath==NULL) { perror("the filePath is not NULL"); return -1; } struct stat stBuf; if(stat(filePath,&stBuf)) { fprintf(stderr,"fail to stat file[%s]:%s\n", filePath,strerror(errno)); return -1; } switch(stBuf.st_mode&S_IFMT) { case S_IFDIR: *type='d';break; case S_IFREG: *type='-';break; default: *type='o';break; } return 0; } int Tree(char *filePath,int deep) { DIR *pDir; struct dirent *pDent; char type; pDir=opendir(filePath); int i; char szSubDir[256]; if(pDir==NULL) { fprintf(stderr,"Faie to open:[%s]",filePath); return 0; } sprintf(szSubDir,"./%s",filePath); chdir(szSubDir); while(1) { pDent=readdir(pDir); if(pDent==NULL) { break; } if(strcmp(pDent->d_name,".")==0|| strcmp(pDent->d_name,"..")==0) { continue; } for(i=0;i<deep;i++) { printf("----"); } printf("%s\n",pDent->d_name); GetFileType(pDent->d_name,&type); if(type=='d') { Tree(pDent->d_name,deep+1); } } chdir("../"); closedir(pDir); return 0; } int main() { char szBuf[256]; getcwd(szBuf,256); Tree(szBuf,1); return 0; }
关于目录操作的一些其他函数:
  • void seekdir(DIR *pDir, long int locate)

    类似fseek()

  • void rewinddir(DIR *pDir)

    类似rewind()

  • long int telldir(DIR *pDir)

    类似ftell()

转载于:https://www.cnblogs.com/chaguang/p/8391304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值