Я хочу перебрать все файлы в каталоге и распечатать их содержимое.
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
,
Когда вы разыменовываете итератор, он возвращает 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();
Посмотрев документацию, я думаю, что вы можете выполнить path_it-> path (). C_str (), так как directory_iterator выполняет итерацию по каталогу directory_entry, который имеет функцию path, которая, в свою очередь, имеет функцию c_str.