zoukankan      html  css  js  c++  java
  • Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】

    转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html

    本文:http://www.cnblogs.com/xudong-bupt/p/3504442.html

    Linux C  下面读取文件夹要用到结构体struct dirent,在头#include <dirent.h>中,如下:

    复制代码
    #include <dirent.h>
    struct dirent
    {
       long d_ino; /* inode number 索引节点号 */
       off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
       unsigned short d_reclen; /* length of this d_name 文件名长 */
       unsigned char d_type; /* the type of d_name 文件类型 */
       char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
    }
    复制代码

    其中d_type表明该文件的类型:文件(8)、目录(4)、链接文件(10)等。

    下面程序,递归读取某文件夹及其子文件夹下所有文件名:

    复制代码
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #include <dirent.h>
     5 #include <unistd.h>
     6 int readFileList(char *basePath)
     7 {
     8     DIR *dir;
     9     struct dirent *ptr;
    10     char base[1000];
    11 
    12     if ((dir=opendir(basePath)) == NULL)
    13     {
    14         perror("Open dir error...");
    15         exit(1);
    16     }
    17 
    18     while ((ptr=readdir(dir)) != NULL)
    19     {
    20         if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
    21             continue;
    22         else if(ptr->d_type == 8)    ///file
    23             printf("d_name:%s/%s
    ",basePath,ptr->d_name);
    24         else if(ptr->d_type == 10)    ///link file
    25             printf("d_name:%s/%s
    ",basePath,ptr->d_name);
    26         else if(ptr->d_type == 4)    ///dir
    27         {
    28             memset(base,'',sizeof(base));
    29             strcpy(base,basePath);
    30             strcat(base,"/");
    31             strcat(base,ptr->d_name);
    32             readFileList(base);
    33         }
    34     }
    35     closedir(dir);
    36     return 1;
    37 }
    38 
    39 int main(void)
    40 {
    41     DIR *dir;
    42     char basePath[1000];
    43 
    44     ///get the current absoulte path
    45     memset(basePath,'',sizeof(basePath));
    46     getcwd(basePath, 999);
    47     printf("the current dir is : %s
    ",basePath);
    48 
    49     ///get the file list
    50     memset(basePath,'',sizeof(basePath));
    51     strcpy(basePath,"./XL");
    52     readFileList(basePath);
    53     return 0;
    54 }
    复制代码

    执行输出 :

  • 相关阅读:
    锚点anchorPoint
    核心动画2
    核心动画1
    CALayer()CoreAnimation 核心动画 简称 CA
    storyBoard
    本地通知UILocalNotification
    CoreImage 可以用滤镜来处理图片,比如修改饱和度,亮度,对比度等
    GCD(2)
    NSOperation(多线程)2
    给你个图片的网络地址url,如何获取该图片的尺寸
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/10516342.html
Copyright © 2011-2022 走看看