C获取具有特定扩展名的所有文件

时间:2014-04-05 20:20:14

标签: c file

如何查找扩展名为“.ngl”的目录中的所有扩展名?

2 个答案:

答案 0 :(得分:2)

C没有标准化的目录管理,即POSIX(或者如果您非常倾向于Windows)。
在POSIX中,您可以执行以下操作:

  1. 获取包含目录
  2. 路径的char *
  3. 在其上使用opendir(),即可获得DIR *
  4. readdir()上使用DIR *重复为您提供目录中的条目struct dirent*
  5. stuct dirent*包含文件名,包括扩展名(.ngl)。它还包含有关条目是常规文件还是其他内容的信息(符号链接,子目录,等等)

答案 1 :(得分:1)

如果您想在一个系统调用的文件夹中获取具有相同扩展名的文件名列表,您可以尝试使用scandir而不是opendirreaddir。唯一要记住的是你需要释放由scandir分配的内存。

   /* print files in current directory with specific file extension */
   #include <string.h>
   #include <stdio.h>
   #include <stdlib.h>
   #include <dirent.h>

   /* when return 1, scandir will put this dirent to the list */
   static int parse_ext(const struct dirent *dir)
   {
     if(!dir)
       return 0;

     if(dir->d_type == DT_REG) { /* only deal with regular file */
         const char *ext = strrchr(dir->d_name,'.');
         if((!ext) || (ext == dir->d_name))
           return 0;
         else {
           if(strcmp(ext, ".ngl") == 0)
             return 1;
         }
     }

     return 0;
   }

   int main(void)
   {
       struct dirent **namelist;
       int n;

       n = scandir(".", &namelist, parse_ext, alphasort);
       if (n < 0) {
           perror("scandir");
           return 1;
       }
       else {
           while (n--) {
               printf("%s\n", namelist[n]->d_name);
               free(namelist[n]);
           }
           free(namelist);
       }

       return 0;
   }