[Linux]C语言遍历文件和目录

来源:互联网 发布:宁波php招聘 编辑:程序博客网 时间:2024/05/01 04:19
#include <stdio.h>  #include <stdlib.h>  #include <string.h>  #include <dirent.h>  #include <unistd.h>  #include <sys/stat.h>  #include <sys/types.h>    #define MAX_PATH_LENGTH     512  #define MAX_FILE_EXTENSION  9    unsigned long visit_dirs = 0;  unsigned long visit_files = 0;    void listdir(char *path){      DIR         *ptr_dir;      struct dirent   *dir_entry;      int         i = 0;      char        *child_path;      char        *file_path;        child_path = (char*)malloc(sizeof(char)*MAX_PATH_LENGTH);      if(child_path == NULL){          printf("allocate memory for path failed.\n");          return;      }      memset(child_path, 0, sizeof(char)*MAX_PATH_LENGTH);        file_path = (char*)malloc(sizeof(char)*MAX_PATH_LENGTH);      if(file_path == NULL){          printf("allocate memory for file path failed.\n");          free(child_path);          child_path = NULL;          return;      }      memset(file_path, 0, sizeof(char)*MAX_PATH_LENGTH);        ptr_dir = opendir(path);      while((dir_entry = readdir(ptr_dir)) != NULL){          if(dir_entry->d_type & DT_DIR){              if(strcmp(dir_entry->d_name,".") == 0 ||                 strcmp(dir_entry->d_name,"..") == 0){                  continue;              }                sprintf(child_path, "%s/%s", path, dir_entry->d_name);              printf("[DIR]%s\n", child_path);                visit_dirs++;                listdir(child_path);          }            if(dir_entry->d_type & DT_REG){              sprintf(file_path, "%s/%s", path, dir_entry->d_name);              printf("[FILE]%s\n", file_path);              visit_files++;          }      }        free(child_path);      child_path = NULL;        free(file_path);      file_path = NULL;  }    int main(int argc, char* argv[]){      if(argc == 2){          listdir(argv[1]);          printf("Total DIR: %ld, Total FILE: %ld\n", visit_dirs, visit_files);      }else{          printf("Usage: listdir <dir>\n");          return;      }            return 0;  }  

0 0
原创粉丝点击