获取某文件夹下的所有文件名(包括文件夹名)

#include <io.h>
#include <string.h>
#include <fstream>
/*
文件信息读取结构体 _finddata_t
struct _finddata_t      
{            
	unsigned attrib; //文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。
	//文件属性是用位表示的,主要有以下一些:
	//_A_ARCH(存档)、 _A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、_A_SUBDIR(文件夹)、_A_SYSTEM(系统)。
	time_t time_create;  //文件创建的时间.time_tm秒数
	time_t time_access; //文件最后一次被访问的时间  
	time_t time_write; //文件最后一次被修改的时间
	_fsize_t size;      //文件的大小(字节数表示)
	char name[_MAX_FNAME];   //文件的文件名,_MAX_FNAME表示文件名的最大长度
};
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
作用:获取存储文件信息的结构体
参数:filespec:文件路径
返回值: 成功 返回一个查找用的long型句柄,失败返回-1

int _findnext( long handle, struct _finddata_t *fileinfo );
作用:查找下一个文件
参数:
		 handle:即由_findfirst函数返回回来的句柄。
		 fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。
返回值: 成功返回0,失败返回1

int _findclose( long handle );
作用:关闭文件信息查找
返回值:成功返回0,失败返回-1。
参数:
 handle :_findfirst函数返回回来的句柄。
*/

//获取文件夹下所有文件名
void getAllFiles(const string& path, vector<string>& files) {
	//文件句柄
	intptr_t hFile = 0;//intptr_t:x86编译时int,X64时long long
	//文件信息
	struct _finddata_t fileinfo;  //文件信息读取结构
	string p;  //string一个赋值函数:assign(str):把str拷贝给p,append(str):在字符串结尾追加str
	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);
	}
}
 

猜你喜欢

转载自blog.csdn.net/yang_aq/article/details/90054859