有时候我们会获取文件夹下所有文件的路径以及完成的名称,这时候如果有一个函数库轻松帮我得到数据就好了,还真有.
```cpp
void getFiles(const std::string & path, std::vector<std::string> & files)
{ //文件句柄 long hFile = 0; //文件信息,_finddata_t需要io.h头文件 struct _finddata_t fileinfo; std::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) getFiles(p.assign(path).append("\\").append(fileinfo.name), files); }else { CString szFileName( fileinfo.name);//szFileName.Format(_T("%s"), fileinfo.name);;CString szFileExt = szFileName.Mid(szFileName.Find(_T("."))+1);//判断文件后缀if (_T("bmp") != szFileExt.MakeLower() && _T("jpg") != szFileExt.MakeLower()&&_T("jpeg") != szFileExt.MakeLower()&& _T("png") != szFileExt.MakeLower()&&_T("tiff") != szFileExt.MakeLower())continue;files.push_back(p.assign(path).append("\\").append(fileinfo.name)); } } while (_findnext(hFile, &fileinfo) == 0); _findclose(hFile); }
}
这时我们需要一个结构体_finddata_t,把文件路径+文件名完整的保存下来,方便用的时候直接拿出来.
struct _finddata_t
{
unsigned attrib;
time_t time_create;
time_t time_access;
time_t time_write;
_fsize_t size;
char name[_MAX_FNAME];
};
attrib属性包括这些类型
_A_ARCH(存档)
_A_HIDDEN(隐藏)
_A_NORMAL(正常)
_A_RDONLY(只读)
_A_SUBDIR(文件夹)
_A_SYSTEM(系统)
time_create 文件创建时间,time_access文件最后一次访问时间,time_write文件最后一次修改时间,size文件大小,name文件最大长度.