函数实现遍历目录中所有文件

用到函数:

此相关函数被封装在头文件direnth.h里,他们使用一个名为DIR的结构作为子目录处理基础,这个结构的指针所指向的内存空间被称为子目录流。

DIR *opendir(const char *name);打开路径并建立子目录流,返回子目录流指针
struct dirent *readdir(DIR *dirp);

函数返回一个指针,指针指向结构里保存的子目录流 dirp 中下

一个目录数据项的有关资料。后续的readdir调用将返回后续的目录数据。如果错误或达到目录尾,将返回NULL;

long int telldir (DIR *dorp)函数返回值里记录着子目录流的当前位置
void seekdir(DIR *dirp,long int loc)对dirp指定的子目录流中的目录数据项的指针进行设置,loc的值用来设置指针的位置,它应该通过一个telldir调用获得
int closedir(DIR * dirp)关闭字目录流,返回关闭操作结果

#include <stdio.h>
#include <dirent.h>                                             // 提供目录流操作函数
#include <string.h>
#include <stdlib.h>
void scan_dir(char *dir, int depth)     // 定义目录扫描函数
{
   DIR *dp;                                                     // 定义子目录流指针
   struct dirent *entry;                        // 定义dirent结构指针保存后续目录
   struct stat statbuf;                         // 定义statbuf结构保存文件属性
   if((dp = opendir(dir)) == NULL) {// 打开目录,获得子目录流指针,判断操作
                                                                                // 是否成功
      puts("无法打开该目录");
      return;
   }
   chdir(dir);                                                  // 切换到当前目录中去
   while((entry = readdir(dp)) != NULL) {               // 获取下一级目录信息,如
                                                                                                // 束则循环果未结
      lstat(entry->d_name, &statbuf);   // 获取下一级成员属性
      if(S_IFDIR & statbuf.st_mode) {   // 判断下一级成员是否是目录
         if(strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0)
                continue;                                               // 如果获得的成员是符号“.”和“..”,
                                                                // 跳过本次循环
         printf("%*s%s/\n",depth,"",entry->d_name);     // 输出目录名称
         scan_dir(entry->d_name,depth+4);// 递归调用自身,扫描下一级目录的内容
      }
      else
         printf("%*s%s\n", depth, "", entry->d_name);   // 输出属性不是目录
                                                                                                                // 的
成员
   }
   chdir("..");                                                                 // 回到上一级目录
   closedir(dp);                                                                // 关闭子目录流
}
int main ()
{ puts("扫描/boot目录");
  scan_dir("/boot",0);
  printf("endl;\n");
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值