2016-02-03 50 views
1

我想寫一個迭代遞歸通過一個目錄,並將每個文件夾,子文件夾和文件名與用戶定義的正則表達式對象進行比較的算法。如何將boost :: filesystem :: directory_entry :: path()值分配給字符串?

我發現這段代碼的重複部分:

path p(FilePath); 
for (directory_entry& x : recursive_directory_iterator(p)) 
    std::cout << x.path() << '\n'; 

文件路徑是在運行時由用戶定義的目錄路徑。

它很適合在控制檯上打印出路徑,但我找不出一種方法來使用path()來做我想做的事情,也就是將它的值賦給一個字符串,然後比較那個字符串到我的正則表達式對象。

我一直在尋找boost :: filesystem :: directory_entry中的其他成員函數,但到目前爲止我還沒有真正有運氣。

任何人都可以指向正確的方向嗎?

謝謝。

編輯:

我很笨。

+2

請從http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/doc/reference查看'path :: string()'或'path :: generic_string()' .html#path-native-format-observers。所以在你的例子中,'x.path()。string()'會給你本地格式字符串 –

+0

謝謝,我們在正確的路徑上,但是我不能讓path()。string()來循環。我編輯了我的問題以顯示問題所在。 –

+0

看到我的回答與你的編輯... –

回答

1

它的偉大工程,打印出的路徑在控制檯上,但我不 出了一種利用路徑()做我想要的東西,這將是分配 其值設置爲一個字符串,然後將該字符串與我的正則表達式對象進行比較。

升壓::路徑已得到,要麼執行轉換爲字符串類型,或返回一個常量引用到下面的儲存機構(典型的std :: string)(see boost path documentation)的字符串構件。因此,只要致電:

x.path().string() 

此外,您可能想添加一些括號後面的for循環:

path p(FilePath); 
std::string temppath; 
for (directory_entry& x : recursive_directory_iterator(p)) 
{ 
    temppath = x.path().string(); 
    std::cout << temppath << std::endl; 
} 

你構造方式的代碼,標準::法院就不能稱其爲部分的循環,但只有在完整的循環後...經典錯誤!

+0

謝謝,我們在正確的道路上,但我不能得到path()。string()來循環。我編輯了我的問題以顯示問題所在。 –

+0

你的大括號在哪裏?對於(){}??? –

+0

我不敢相信...謝謝。我在想Python- .- –

相關問題