当前位置:   article > 正文

c/c++获取文夹下所有图片文件路径_c++遍历文件夹下所有jpg文件

c++遍历文件夹下所有jpg文件

在做项目的时候,我们有时候会遇到给定一个文件夹目录,获取该目录下某种类型的文件的路径。也就是遍历一个目录下的所有文件。经过查询,发现可以通过

代码实例:
获取某一目录下所有的.jpg文件路径
#include <io.h>
#include <string>
#include <vector>
#include <fstream>

void getAllFiles(string path, vector<string>&files, string fileType){

    //文件句柄
    long hFile = 0;
    struct _finddata_t  fileInfo;
    string p;

    if ((hFile = _findfirst(p.assign(path).append("\\*" + fileType).c_str(), &fileInfo)) != -1){
        do{
            files.push_back(p.assign(path).append("\\").append(fileInfo.name));
        } while (_findnext(hFile, &fileInfo) == 0);

        _findclose(hFile);//关闭句柄

    }

}

int main(){
    vector<string> temp;
    getAllFiles("..\\Data\\AddImages", temp, ".jpg");

    for (int i = 0; i < temp.size(); i++){

        cout << temp[i] << endl;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

测试结果:
这里写图片描述

获取某一目录下所有的文件路径
void getAllFiles(string path, vector<string>& files) 
{
  // 文件句柄
  long hFile = 0;
  // 文件信息
  struct _finddata_t fileinfo; 

  string p;

  if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
    do {
      // 保存文件的全路径
      files.push_back(p.assign(path).append("\\").append(fileinfo.name));

      } while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1

    _findclose(hFile);
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
获取指定目录下的所有文件(搜索子文件夹)
void getAllFiles(string path, vector<string>& files) {
  //文件句柄
  long hFile = 0;
  //文件信息
  struct _finddata_t fileinfo; 
  string p; 
  if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
    do {
      if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
      if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) {
          files.push_back(p.assign(path).append("\\").append(fileinfo.name));
          //递归搜索
          getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files);
        }
      }
      else {
        files.push_back(p.assign(path).append("\\").append(fileinfo.name));
      }
    } while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
    _findclose(hFile);
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

注意:使用_findfirst()、_findnext()进行搜索时,可能会得到”.”和”..”两个文件夹名。这两个值可以忽略

_finddata_t结构体
struct _finddata64i32_t {
        unsigned    attrib;
        __time64_t  time_create;    /* -1 for FAT file systems */
        __time64_t  time_access;    /* -1 for FAT file systems */
        __time64_t  time_write;
        _fsize_t    size;
        char        name[260];
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

unsigned attrib:
标识文件的属性。文件的属性,主要有下面这些:_A_ARCH(存档)、 _A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。这些都是在宏中定义,可以直接使用。attrib ,从数据类型上来说,就是一个无符号整型数据,它是按照某位为1,其余位为零来定义一个文件的属性,这样做有一个好处,就是当一个文件有多个属性的时,可以直接按位或方式表示。列如,当一个文件具有只读+隐藏+系统属性的时候,应该表示为A_HIDDEN | _A_RDONLY | _A_SYSTEM。**
__time64_t time_create: 表示一个文件的创建时间。
__time64_t time_access:表示一个文件最后访问时间。
__time64_t time_write:表示一个文件最后修改时间。
_fsize_t size:表示一个文件的大小(字节数)。
char name[260]:表示一个文件的名字。

_findfisrt()/_findnexe()/_findclose() 函数

intptr_t _findfirst( const char * filespec, struct _finddata_t *fileinfo);
参数:
char *filespec,目标文件描述(可包含通配符)。
_finddata_t* 类型,函数将会把获得结果,存入该结构体。
返回值:
如果成功,返回一个唯一的搜索句柄标识或一组和filespec说明的匹配文件,可以用于接下来的_findnexe()和_findclose()函数。

int _findnext( intptr_t handle,struct _finddata_t *fileinfo);
参数:
intptr_t handle ,搜索句柄,_finddata_t* ,存入查询结果。
返回值:
如果成功,返回0,否则返回-1。

int _findclose( intptr_t handle);
作用:关闭资源。
参数:intptr_t handle,搜索句柄 。
返回值:成功0,否则-1。

希望对您有所帮助!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号