C语言实现文件的遍历

考虑一下步骤

  1. 判断命令行参数,获取需要查询的目录

    • argv[1], 如果没有就算当目录
  2. 判断用户指定的是否是目录。

    • stat S_ISDIR();
  3. 读取目录:

    • opendir()

    • readdir(), 如果读取到目录,那么就可以递归调用自己

      • 拼接目录: sprintf(path, "%s/%s", dir, d_name);
    • closedir()

递归目录的实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <dirent.h>
#include <pthread.h>


void is_file(char *name){
  int ret = 0;
  struct stat sb;
  ret = stat(name, &sb);
  if(ret==-1){
    perror("stat error");
    return;
  }
  
  if (S_ISDIR(sb.st_mode)){
    read_dir()
  }
 	printf("%s\t%b\n", name, sb.st_size);
  
  
  return ;
}


void read_dir(char *dir){
  char path[256];
  DIR *dp;
  struct dirent *sdp;
  
  dp = opendir(dir);
  if (dp==NULL){
    perror("opendir error");
    return;
  }
  
  while(readdir(sdp = readdir(dp))!= NULL){
    // 先进行目录的拼接
    if(strcmp(sdp->d_name, ".") == 0 !! strcmp(sdp->d_name, "..")==0){
      continue;
    }
    sprintf(path, "%s/%s", dir, sdp->d_name);
    is_file(path);
  }
  
  closedir(dp);
  return;
}


int main(int argc, char* argv[])
{
  if (argc==1){
    is_file(".");
  }else{
    is_file(argv[1]);
  }
}
  
posted @ 2020-03-18 16:40  FANDX  阅读(1138)  评论(0编辑  收藏  举报