2013-02-25 71 views
2

我有一个根文件夹包括获取列表文件夹和文件列表中的根文件夹通过dirent.h在C++

+ Test1(folder) > Test2(folder)>Test3(folder)>file1,file2....(file) 
+ Test5(folder) > Test6(folder)>file1,file2....(file) 

如何获得列表文件的输入是C盘根目录++。如果列表文件(文件1,文件2 ....)是子文件夹根文件夹(根文件夹>文件1,文件2 ...),我可以成功获取列表文件。但在我的情况下,要获取列表文件,我必须扫描许多父文件夹。如何在我的情况下获取列表文件?这是我的代码,如果没有父文件夹

DIR *dirStr = NULL; 
    dirStr = opendir(rootpath) 
    dirent *nextFile = NULL; 
    while ((nextFile = readdir(dirStr))!=NULL) 
    { 
     // Avoid hidden files 
     //Scan all file an dictionary 
     if (nextFile->d_name[0] != '.') 
     { 
        cout<<nextFile->d_name<<endl; 
     } 
    } 
+1

从这里了解:[目录递归扫描程序(http://www.johnloomis.org/ece537/notes/Files/ Examples/printdir.html) – 2013-02-25 16:09:28

+0

在POSIX平台上,'fts(3)'可能是一个选项。 – 2013-02-25 16:09:29

回答

3

您将使用递归。

递归函数是自己调用的函数。也有调用另一个函数的相互递归函数,而函数又调用函数调用函数。

递归一个绝佳例子是这样的天真阶乘函数:

int factorial(int x) { 
    if (x == 1) return 1; // assume 1 
    else if (x > 1) return x*factorial(x-1); 
    else throw std::logic_error("factorial called with argument<1"); 
} 
+0

对不起。在你的代码中,你知道深度参数。但在我的情况下,我不知道如何父文件夹,所以我不知道深度参数? – user2039786 2013-02-25 16:34:01

+0

@ user2039786老实说,“我不知道如何为父文件夹”,但你给了一个初始文件夹,你将需要它来建立你的子文件夹全名或相对名称。最后,一旦你得到它几乎工作,请记住'dirent *'结构可以(并且)将被任何循环中的每个连续调用覆盖,所以如果打算保留这些文件名,就准备复制。 – WhozCraig 2013-02-25 16:38:59

+0

谢谢。我还有其他问题与我上面的问题有关。我有一个函数(一个函数)与输入是列表文件来做一些事情。我有两个文件夹(在上面的问题中是一样的)。我想用列表文件调用一个函数。输出文件将返回到与输入文件相同的文件夹中。怎么做? – user2039786 2013-02-25 16:55:24

相关问题