您好我正在尝试编写一个递归搜索路径和子目录的函数,并将每个文件的扩展名作为键推送到映射中,并使值计算文件类型的数量。这是我到目前为止,我能够创建一个函数显示有关所输入路径中的所有文件/文件夹的信息,但是我在递归扫描目录时遇到了麻烦。这就是我正在使用的......
std::string FileExtractor(const std::string input)
{
std::string::size_type idx;
idx = input.rfind('.');
if (idx != std::string::npos)
{
return input.substr(idx + 1);
}
else
{
return "none";
}
}
std::map<std::string, int> recursive(std::string path)
{
intptr_t hFile;
struct _finddata_t fd;
std::string filespec = "*.*";
std::string findPath = path + filespec;
hFile = _findfirst(findPath.c_str(), &fd);
std::map<std::string, int> myMap;
std::string size = "";
if (hFile == -1L)
{
std::cout << "No " << filespec << " files in the current dir\n";
}
else
{
std::cout << "Scanning recursively in " << path << "\n" << std::endl;
do
{
if ((fd.name != std::string(".")) && (fd.name != std::string("..")))
{
std::cout << fd.name;
++myMap[FileExtractor(fd.name)];
if (fd.attrib & _A_SUBDIR)
{
std::string str = path + fd.name + "\\";
recursive(path);
}
}
} while (_findnext(hFile, &fd) == 0);
_findclose(hFile); // close the file handle
}
return myMap;
}
我还没有发表评论,所以我会尝试解释一下:
我使用io.h作为学习递归写函数的方法;我不打算使用提升或其他任何东西。当我扫描路径并找到文件时,它会将扩展名推送到地图。如果文件是目录,它将再次调用该函数并打印出结果。
我不确定从哪里开始,我正在寻求一般的帮助,不一定是答案,但指出了我正确的方向,我会自己弄明白!
答案 0 :(得分:1)
此...
if (fd.attrib & _A_SUBDIR)
{
std::string str = path + fd.name + "\\";
recursive(path);
}
应该是这个......
if (fd.attrib & _A_SUBDIR)
{
std::string str = path + fd.name + "\\";
recursive(str);
}