Windows函数实现获取文件夹下所有的文件

  1、_findfirst 的函数原型:

long _findfirst( char *filespec, struct _finddata_t *fileinfo );

它返回一个文件句柄,并将文件名匹配由 filespec 指定的模式的第一个文件的信息保存在 fileinfo 里。例如找某个目录下的 mp4 文件,那么 fileinfo 就保存了该目录下第一个mp4 文件的信息,调用方式如下,如果是32位系统:

long pFile = long _findfirst( "*.mp4", fileinfo );

如果是64位系统:

long long pFile = long _findfirst( "*.mp4", fileinfo );

而用来保存文件信息的 fileinfo 是一个数据类型为 _finddata_t 的结构体,在头文件#include <io.h>定义:

struct _finddata_t {
	unsigned  attrib;  /*文件属性*/
	time_t  time_create;  /*文件创建时间, -1 for FAT file systems */
	time_t  time_access;  /*文件最后一次访问的时间 -1 for FAT file systems */
	time_t  time_write;  /*文件最后一次写的时间*/
	_fsize_t  size;  /*文件大小*/
	char  name[_MAX_FNAME];  /*匹配的文件名,不包含目录,_MAX_FNAME在STDLIB.H中定义为256字节*/
};

 2、_findnext 

函数原型:

int _findnext( long handle, struct _finddata_t *fileinfo );

这个函数调用如果成功就返回0,否则返回-1。它将下一个文件名匹配 filespec 的文件的信息保存在 fileinfo 里面,handle 是调用 _findfirst 时返回的句柄。比如说要得到下一个.mp4文件的信息,我们可以这样调用函数:

_findnext(pFile, fileinfo);

所以通过不断调用 _findnext 直到它返回-1就可以遍历所有的mp4文件了。

 3、_findclose 

int _findclose( long handle );

4、_A_SUBDIR(子目录)

 5、综合实现函数-可直接调用

        如果只需要特定的文件,比如.mp4、.jpg、.png 、.bmp等等,只需将

if ((hFile = _findfirst(pFile.assign(path).append("\\*").c_str(), &fileinfo)) != -1)将其修改为对应的

if ((hFile = _findfirst(pFile.assign(path).append("\\*.mp4").c_str(), &fileinfo)) != -1)。

//获取文件夹下所有的文件
void getFilesByFolder(std::string path, std::vector<std::string>& files){
	long long  hFile = 0;//文件句柄
	struct _finddata_t fileinfo;	//文件信息
	std::string pFile;
	if ((hFile = _findfirst(pFile.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do{			
			if ((fileinfo.attrib & _A_SUBDIR)){
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
					getFilesByFolder(pFile.assign(path).append("\\").append(fileinfo.name), files);
			}
			else
				files.push_back(pFile.assign(path).append("\\").append(fileinfo.name));
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值