2013-03-05 51 views
2

我試圖從Visual Studio 2012中的directory_iterator獲取絕對路徑。在早期版本的Boost庫中可以使用native_file_string()。沒有可用的功能成員現在返回絕對路徑。我最後不得不目錄路徑與文件名結合:如何從Visual Studio 2012中的directory_iterator獲取絕對路徑<filesystem>

string   filePath = "C:\\Eigen\\CMakeLists.txt"; 
string   prefix = path (filePath).parent_path().string() + "/"; 
vector<string> fullPaths; // Full paths of all files in directory. 

for (auto i = directory_iterator (path (filePath).branch_path()); i != directory_iterator(); ++i) 
    fullPaths.push_back (prefix + i->path().string()); 

是否有辦法有能力返回的完整路徑的目錄迭代器?在上面的循環中,我嘗試過:

auto s1 = i->path().branch_path(); 
auto s2 = i->path().directory_string(); 
auto s4 = i->path().file_string(); 
auto s5 = i->path().root_path(); 
auto s6 = i->path().parent_path(); 
auto s7 = i->path().string(); 
auto s8 = i->path().basename(); 
auto s9 = i->path().filename(); 
auto sa = i->path().root_name(); 
auto sb = i->path().relative_path(); 

並且它們都沒有返回完整路徑。

編輯:我注意到使用recursive_directory_iterator而不是directory_iterator將產生完整(絕對)路徑。這是設計嗎?如果我不想遞歸迭代會怎麼樣?

回答

3

您可能正在尋找absolute(),這是非會員功能。

+0

我似乎微軟還沒有實現它。 – 2013-03-05 20:49:52

+3

@PaulJurczak根據[this](http://cpprocks.com/introduction-to-tr2-filesystem-library-in-vs2012/),VS2012中的版本基於Boost.Filesystem v2。你可以看到[這裏](http://msdn.microsoft.com/en-us/library/hh874694.aspx)它的文檔。我認爲相當於'absolute'的函數是['complete'](http://msdn.microsoft.com/en-us/library/hh874892.aspx),但我不確定。 – 2013-03-06 06:55:36

+0

@llonesmiz:你說得對,'完成'的作品。 – 2013-03-06 15:15:32