2015-10-22 99 views
0

我想制作一个方法来读取目录及其子目录中的所有文件,并返回带有文件名称的矢量。到目前为止,我无法找到一些关于这个问题很有用:/ 这里是我的方法的例子wchich在读取目录中的文件,但不是在subdrictories使用C++从目录和子目录返回矢量中的文件

vector open_directories(const string path_dir) 
{ 
    DIR *directory; 
    dirent *pdir; 
    vector<string> files_name; 

    dir = opendir(path_dir.c_str()); 

    while((pdir = reddir(dir))) { 
     files_name.push_back(pdir->d_name); 
    } 

    return files_name; 
} 

有任何解决方案打开子目录也?

+0

打开子目录是一样的打开的目录。如果您还想从子子目录获取文件,请递归使用您的函数并合并结果。 – Zereges

+1

[有效遍历目录树与opendir(),readdir()和closedir()](http://stackoverflow.com/questions/2312110/efficiently-traverse-directory-tree-with-opendir-readdir-and -closedir) –

+2

使用['boost :: filesystem'](http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference.html)并节省您的麻烦, – user657267

回答

3

如果您对您的环境中可用的<filesystem>头,那么你可以使用std::filesystem::recursive_directory_iterator这个 即

#include <filesystem> 
#include <vector> 

std::vector<std::string> getFilenamesRecursive(const std::string& directory) { 
    std::vector<std::string> retVal; 
    std::tr2::sys::path path(directory); 
    for (auto it = std::tr2::sys::recursive_directory_iterator(path); 
    it != std::tr2::sys::recursive_directory_iterator(); ++it) { 
    retVal.push_back(it->path().generic_string()); 
    } 
    return retVal; 
} 
相关问题