Linux下使用C语言查找一个文件夹下指定扩展名的所有文件

       最近在linux下要干点和c语言相关的任务,其中涉及使用C语言查找一个文件夹下指定扩展名的所有文件,我去开始在网上查找后粘贴后不能用,最后发现是windows下才能使用。最后找到了一篇不错的文章,https://www.cnblogs.com/fnlingnzb-learner/p/6472391.html 这个是遍历当前目录下所有文件及其子文件夹,但是不太符合我的需求,我只需遍历当前目录就可,子目录不用管,我在他的基础上做了些修改方便自己使用。下面贴出具体代码:

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#include "dirent.h"

  //#########################################################//
int GetFileNamesInDir(char *DirPath,char *FileExtName,char FileNames[][128],int *FileNum,int MaxFileNum)
{
    DIR *dir;
    struct dirent *ptr;

    if ((dir=opendir(DirPath)) == NULL)
    {
        perror("Open dir error...");
        exit(1);
    }
    
    char *CurFileExtName = NULL;
    while ((ptr=readdir(dir)) != NULL)
    {
        if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir
            continue;//跳过.和..目录
        else if(ptr->d_type == 8)    ///d_type=8对应file
        {  
            CurFileExtName = rindex(ptr->d_name, '.');//char *rindex(const char *s, int c);rindex()用来找出参数s 字符串中最后一个出现的参数c 地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。
            if(CurFileExtName!=NULL&& strcmp(CurFileExtName,FileExtName) == 0)
            {  
                if(*FileNum<MaxFileNum)
                {
                   memcpy(FileNames[(*FileNum)++],ptr->d_name,sizeof(ptr->d_name)); 
                   //printf("CurFilePath=%s/%s\n",DirPath,ptr->d_name);
                }
                
            }     
        }     
    }
    closedir(dir);

    return 1;
}
//#########################################################//


int main(void)
{
   char *DirPath="./MyIms";
   char *FileExtName=".jpg";
   char FileNames[1000][128];
   int MaxFileNum=1000;
   int FileNum=0;
   GetFileNamesInDir(DirPath,FileExtName,FileNames,&FileNum,MaxFileNum);
   printf("########Find include %s suffix FileNum=%d########\n",FileExtName,FileNum);
   for(int i=0;i<FileNum;i++)
   {
        printf("CurFilePath=%s/%s\n",DirPath,FileNames[i]);
   } 

}

我的示例文件夹如下:

《Linux下使用C语言查找一个文件夹下指定扩展名的所有文件》

编译一下程序: gcc -o Test GetFileNamesInDir.c 

然后在执行:./Test

《Linux下使用C语言查找一个文件夹下指定扩展名的所有文件》

 

 

    原文作者:粼粼淇
    原文地址: https://blog.csdn.net/lingyunxianhe/article/details/104846943
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞