2013-02-25 83 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

相關問題