我想迭代目录中的所有文件并打印其内容。
Boost非常好地处理迭代部分,但我不知道如何将其转换为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但无法找到string
或c_str()
之类的内容。我是C++
和boost
的新手,并且希望找到一些javadoc
类似的文档,这些文档基本上会告诉我成员是什么以及可用的功能而不是倾销源代码。
很抱歉咆哮,但有人可以告诉我如何将*path_it
转换为c string
。
答案 0 :(得分:20)
当您取消引用迭代器时,它会返回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();
或者,您可以直接从string
directory_entry
std::string path = entry.path().string();
答案 1 :(得分:1)
在查看文档后,我认为你可以做path_it-&gt; path()。c_str(),因为一个directory_iterator遍历directory_entry,它有一个路径函数,而这个函数又有一个c_str函数。