C++获取文件夹下所有文件名称的三种方式

时间:2021-07-26 14:02:25

1

利用dos命令把文件夹下所有文件名存入指定文件,再从文件读取,存入vector中

         string imglist_file = "test_result\\imglist.txt";//存储文件名称列表
string temp_imgname;
string dir_command("dir ");
dir_command += m_strImageSet + "/b > " + imglist_file;//m_strImageSet是我之前建立的变量 里面存放的是文件夹路径
ifstream file(imglist_file.c_str(),ios::in);
system(dir_command.c_str());
vector <string> imglist;

//把图像名称都存入vector中
while(file>>temp_imgname)
{
imglist.pushback(temp_imgname);
}
file.close();

2

利用_findfirst、_findnext获取所有文件名

         string temp_imgname;
long hFile = 0;//文件句柄
_finddata_t fileinfo;//文件信息
vector<string> imglist
if((hFile = _findfirst(m_strImageSet+"\\*",&fileinfo)) != -1)//m_strImageSet是我之前建立的变量 里面存放的是文件夹路径
{
do
{
if((fileinfo.attrib & _A_SUBDIR))
{
continue;//如果是目录则跳过
}
else
{
imglist.push_back(temp_imgname);
}
}while(_findnext(hFile, &fileinfo) == 0);

_findclose(hFile);
}


3 利用finder获取

         WIN32_FIND_DATA FindFileData;
int finder = 1;
CString m_strImageSet_t = m_strImageSet +"\\*.*";)//m_strImageSet是我之前建立的变量 里面存放的是文件夹路径
CString m_strImageSet_t1 = m_strImageSet +"\\";
string imgname_temp;
vector <string> imglist;
HANDLE hFind = FindFirstFile(m_strImageSet_t, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
return ;
}
else
{
while(finder)
{

if((_tcscmp(FindFileData.cFileName,_T("."))==0)||(_tcscmp(FindFileData.cFileName,_T(".."))==0))//过滤资源管理器中默认两个文件夹.和..
{
finder = FindNextFile(hFind,&FindFileData);
continue;
}
else
{
temp_imgname = FindFileData.cFileName;
imglist.pushback(temp_imgname);

}


}
}
FindClose(hFind);