Как преобразовать boost::filesystem::directory_iterator в const char *

Я хочу перебрать все файлы в каталоге и распечатать их содержимое. 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);
    }

Я попытался прочитать эту документацию но ничего похожего на string или c_str() не нашел. Я новичок как в C++, так и в boost, и надеялся найти какую-нибудь документацию, подобную javadoc, которая в основном рассказывала бы мне, какие члены и какие функции были доступны, вместо того, чтобы выгружать исходный код.

Извините за разглагольствования, но может кто-нибудь сказать мне, как преобразовать *path_it в c string.


person nikhil    schedule 01.05.2013    source источник
comment
Он находится в directory_entry.   -  person Peter Wood    schedule 01.05.2013
comment
Спасибо, разобрался с этим. Любые советы о том, как я могу научиться бусту менее болезненным способом?   -  person nikhil    schedule 01.05.2013
comment
Я думаю, что вам лучше всего попытаться найти модульные тесты. Или напишите их сами, чтобы разобраться.   -  person Andreas Haferburg    schedule 01.05.2013


Ответы (2)


Когда вы разыменовываете итератор, он возвращает 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();
person Peter Wood    schedule 01.05.2013
comment
Спасибо и за комментарий, и за ответ. - person nikhil; 01.05.2013

Посмотрев документацию, я думаю, что вы можете сделать path_it->path().c_str(), так как directory_iterator перебирает directory_entry, у которого есть функция path(), которая, в свою очередь, имеет функцию c_str().

person Anon Mail    schedule 01.05.2013
comment
Мне нужно было сделать path_it->path().string().c_str(), чтобы заставить его работать. - person nikhil; 01.05.2013