2015-04-07 51 views
0

我有一個目錄test和一個子目錄元數據。 C:/Users/name/Desktop/test/metadata\\test_1.metadata。 我以這種方式訪問​​元數據目錄內的文件。以更好的方式訪問子目錄的文件

std::string filename = dir_iter->path().string(); 
std::string rawName = filename.substr(0 , filename.find_last_of(".")); 
std::string subRawDir = rawName.substr(0 , rawName.find_last_of("\\")) + "/metadata\\"; 
std::string name = subRawDir + rawName.substr(filename.find_last_of("\\") + 1) + ".metadata"; 

比這更好的辦法將是不錯:)

+0

Initiallly,路徑是從測試目錄中的文件。 – Launa

回答

0

你可以給一個嘗試的boost ::文件系統。它提供了許多函數來遍歷目錄,子目錄和文件。 你可以找到的教程和說明here

這裏就如何做到這一點的例子:

#include <boost/filesystem.hpp> 
    #include <boost/foreach.hpp> 

    boost::filesystem::path your_dir("C:/Users/name/Desktop/test/metadata"); 

    boost::filesystem::directory_iterator it(your_dir), end_of_dir; 

    BOOST_FOREACH(boost::filesystem::path const &p, std::make_pair(it, end_of_dir)) 
    { 
     if(is_regular_file(p)) 
     { 
      // Do stuff with your file 
     } 
    } 
+0

問題是我必須保存測試目錄文件的路徑並將它傳遞給另一個函數,並檢查文件是否存在於元數據目錄中,如果不存在,則創建並填充該文件。所以,我做了4個變量。子目錄內的迭代不是問題。我希望使用更少的變量並以更好的方式訪問子目錄。 – Launa

+0

不知道我是否理解你的問題。您需要提取子目錄名稱(即/元數據)或文件名稱(即test_1.metadata)? – gcswoosh

+0

存在測試目錄。但是,不確定是否存在像test_1.metadata這樣的文件。如果該文件不存在,則必須創建該文件。此外,原始路徑必須保存在測試目錄內,而不是在元數據目錄中以用於進一步目的。可能是我明確了:)。我猜REGEX使它更簡單,但我與REGEX無效。 – Launa

相關問題