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

19 篇文章 0 订阅

       最近在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]);
   } 

}

我的示例文件夹如下:

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

然后在执行:./Test

 

 

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值