2014-01-27 72 views
0

我編寫了一小段代碼來輕鬆添加目錄中圖像的文件名,並將它們添加到文本文件的列表中。這工作得很好,但是當圖像位於子文件夾內時,它只會將文件夾名稱添加到文本文件中。將文件夾中的圖像文件名寫入文本文件C++

我需要它能夠檢查它是否是一個文件夾,然後添加正確的目錄到文本的圖像,這可能是在子文件夾內,例如子文件夾/ image.jpg的

無法弄清楚我需要添加什麼。這是我這麼遠......

#include<stdio.h> 
#include<cstdlib> 
#include<iostream> 
#include<string.h> 
#include<fstream> 
#include<dirent.h> 

void listFile(); 

std::ofstream myfile; 

int main(){ 
listFile(); 
return 0; 
} 

void listFile(){ 
    DIR *pDIR; 
    struct dirent *entry; 
    if(pDIR=opendir("/home/hduser/Example2Files/TrainImages/")){ 
      while(entry = readdir(pDIR)){ 
       if(strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) 

       myfile.open ("/home/hduser/Example2Files/TrainImages/train.txt",std::ios_base::app); 
       myfile << entry->d_name << "\n"; 
       myfile.close(); 

      } 
      closedir(pDIR); 
    } 
} 
+1

你需要使'listFile'成爲一個遞歸函數。讓它只需要一個參數即被讀取的目錄名稱。然後你可以在你遇到的任何目錄中調用它。 – paddy

回答

1

要遍歷到的目錄,你會(可能)需要修改你的代碼,你有一個函數,將一個目錄的名稱,並列出該目錄內的常規文件。如果它找到一個目錄,它應該遞歸調用當前目錄的連接名稱和找到的目錄。

要確定文件是否是目錄,可以使用類似entry.d_type == DT_DIR的東西。

+0

我已經設法添加一些代碼,以便它檢測它是否是一個目錄,然後進入另一個函數。但是,我有一個麻煩傳遞它已停止的目錄正確的目錄名稱。 另外我不太確定我將如何遞歸通過該目錄列出的文件。 – Dan

+0

您需要一個本地變量來保存新的目錄名稱(大小爲PATH_MAX),該目錄名稱是通過將新找到的目錄附加到當前輸入到該函數中而創建的。然後用新路徑回到函數中。簡單的字符串操作,真的。 –