此处位获取所有文件的代码
void getFiles( 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)
getFiles( p.assign(path).append("\\").append(fileinfo.name), files, ownname ); */
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
ownname.push_back(fileinfo.name);
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
注:在Win10中 hFile 需要改成如下才可以正确执行
//文件句柄
long long hFile = 0;
此处位获取文件下这一层所有文件夹的代码
void CclassifyDlg::find_directory(std::string path, vector<std::string>& files)
{
/*files存储文件的路径及名称(eg. C:\Users\WUQP\Desktop\test_devided\data1.txt)
ownname只存储文件的名称(eg. data1.txt)*/
//文件句柄
long long hFile = 0;
//文件信息
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, ownname ); */
}
else
{
files.push_back(p.assign(path).append("/").append(fileinfo.name));
//ownname.push_back(fileinfo.name);
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
注:获取的文件名的第一个和第二个分别为 . 和 ..