我想创建一个方法来读取一个目录,并在数据结构中查找并保存所有包含的目录以及每个目录的所有子目录。具体来说,我想的名字被引用为:在C++中通过递归查找目录和子目录
文件夹1 folder11 folder12 文件夹2 folder21 folder22 folder23
我显然需要用递归函数。 我使用临时类成员方法在控制台应用程序为:
private:
struct dirent *ep;
void DirectoryReader::parseDirectory(char* readingDirectory)
{
char* tempDirectory = (char*)malloc(sizeof(readingDirectory) + 200);
string temp = readingDirectory;
DIR *dp;
dp = opendir (readingDirectory);
if (dp != NULL)
{
while (ep = readdir (dp))
{
puts (ep->d_name);
temp += readingDirectory;
temp += "/";
temp += ep->d_name;
char * buffer = new char[temp.length()];
strcpy(buffer,temp.c_str());
parseDirectory(buffer);
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
}
好吧,我不知道写得最好的代码,但我想最初有抓住了名的视图。但是它不能正常工作,因为它不止一次地考虑父目录的名称。即使我把调用相同的方法(不执行递归),前两个名字是。和......。为什么?
您能否建议我执行上述过程的功能或指示对此功能要求的更正?
你能分享错误的输出吗? – 2012-06-19 08:13:24
你在这里有一个错误的问题:当你分配'buffer'时,你不会为终止的''\ 0''字符分配空间。你也不会释放分配的内存。但是不使用临时缓冲区,为什么不直接将'temp.c_str()'传递给递归调用呢? –
此外,您尝试缓存_all_文件。你必须检查它是否真的是一个目录,可以用'ep-> d_type == DT_DIR'来检查。或者如果没有'ep-> d_type'字段,你可以'stat'来获得类型。 –