2013-05-01 38 views
9

我想遍歷目錄中的所有文件並打印它們的內容。 Boost很好地處理迭代部分,但我不知道如何將其轉換爲const char *如何將boost :: filesystem :: directory_iterator轉換爲const char *

boost::filesystem::directory_iterator path_it(path); 
    boost::filesystem::directory_iterator end_it; 
    while(path_it != end_it){ 
     std::cout << *path_it << std::endl; 

     // Convert this to a c_string 
     std::ifstream infile(*path_it); 
    } 

我試圖讀取該documentation但找不到像stringc_str()什麼。我是C++boost的新手,希望能找到一些類似文檔,這些文檔基本上可以告訴我這些成員是什麼,可以使用哪些函數而不是傾銷源代碼。

抱歉的咆哮,但有人可以告訴我如何將*path_it轉換爲c string

+0

它在[directory_entry(http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference。 HTML#類directory_entry)。 – 2013-05-01 12:19:48

+0

謝謝,從中弄明白了。有關我如何學習以不那麼痛苦的方式學習的提示? – nikhil 2013-05-01 12:23:27

+1

我認爲你最好的選擇是嘗試找到單元測試。或者自己寫一些東西來解決問題。 – 2013-05-01 12:58:35

回答

12

當你解引用迭代器,它返回一個directory_entry

const directory_entry& entry = *path_it; 

您可以使用此與operator<<ostream一起,因爲你已經發現:

std::cout << entry << std::endl; 

你可以通過創建一個字符串ostringstream

std::ostringstream oss; 

oss << entry; 

std::string path = oss.str(); 

或者你可以從directory_entry直接訪問路徑作爲string

std::string path = entry.path().string(); 
+1

感謝您的評論和答案。 – nikhil 2013-05-01 13:12:39

1

查看文檔後,我認爲你可以做path_it-> path()。c_str(),因爲directory_iterator遍歷directory_entry,它具有一個路徑函數,該路徑函數又具有c_str函數。

+0

我需要做'path_it-> path()。string()。c_str()'來使它工作。 – nikhil 2013-05-01 12:46:11