#include <io.h>
#include <list>
#include <iostream>
std::list<std::string> getAllFiles(const std::string inputpath)
{
std::list<std::string> allfiles;
struct _finddata_t fileinfo;
std::string path;
auto filehandler = _findfirst(path.assign(inputpath).append("/*").c_str(), &fileinfo);
if (filehandler != -1)
{
do
{
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getAllFiles(path.assign(inputpath).append("/").append(fileinfo.name));
}
else
{
allfiles.push_back(path.assign(inputpath).append("/").append(fileinfo.name));
}
}
while (_findnext(filehandler, &fileinfo) == 0);
_findclose(filehandler);
}
return allfiles;
}
验证一下:
int main()
{
const std::string inputpath = "../../../STL/stl";
std::list<std::string> allfiless = getAllFiles(inputpath);
for (std::list<std::string>::iterator it = allfiless.begin(); it != allfiless.end(); it++)
{
std::cout << it->c_str() << "\n";
}
std::cout << std::endl;
return 0;
}
事实上,
std::list<std::string> allfiles
std::vector<std::string> allfiles
std::deque<std::string> allfiles
三种数据存储结构都是可以的。