c实现获取文件夹下所有图片/文件的路径

参考路径:https://blog.csdn.net/qq_22494029/article/details/79288923

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

代码实例:

获取某一目录下所有的.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;
    }
}

测试结果:
《c实现获取文件夹下所有图片/文件的路径》

获取某一目录下所有的文件路径

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);
  }
}

注意:使用_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];
};

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。

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