头文件:#include<io.h>html
getFiles1函数:获取某个文件夹下的全部文件,返回各文件的路径app
getFiles2函数:获取某个文件夹下的全部文件,返回各文件的路径和名称ide
//主函数
char * filePath = "D:\\sample"; vector<string> files; //vector<string> filesname;
//获取该路径下的全部文件路径 getFiles1(filePath, files);
//获取该路径下的全部文件路径和文件名
//getFiles2(filePath, files, filesname); char str[30]; for (int i = 0;i < files.size();i++) { cout<<files[i].c_str()<<endl; }
void getFiles1( string path, vector<string>& files ) { //文件句柄 //long hFile = 0; //win7
intptr_t hFile = 0; //win10 //文件信息 struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
// "\\*"是指读取文件夹下的全部类型的文件,若想读取特定类型的文件,以png为例,则用“\\*.png” { do { //若是是目录,迭代之 //若是不是,加入列表 if((fileinfo.attrib & _A_SUBDIR)) { if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) getFiles1( p.assign(path).append("\\").append(fileinfo.name), files ); } else { files.push_back(path + "\\" + fileinfo.name); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }
void getFiles2( string path, vector<string>& files, vector<string> &ownname) { /*files存储文件的路径及名称(eg. C:\Users\WUQP\Desktop\test_devided\data1.txt) ownname只存储文件的名称(eg. data1.txt)*/ //文件句柄 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) getFiles2( p.assign(path).append("\\").append(fileinfo.name), files, ownname ); } else { files.push_back(path +"\\" + fileinfo.name); ownname.push_back(fileinfo.name); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }
Win10下C++代码文件夹遍历错误:0xC0000005: 写入位置时发生访问冲突
win7下定义的文件句柄类型是long型,在win10下将其改成intptr_t类型便可。函数
参考博客:spa