C++: Boost: как проверить наличие папки внутри другой папки в моем рабочем каталоге?

код:

boost::filesystem::path config_folder(Config::CONFIG_FOLDER_NAME);

if( !(boost::filesystem::exists(config_folder)))
{
    std::cout << "Network Config Directory not found...n";
    std::cout << "Creating folder called " << Config::CONFIG_FOLDER_NAME << "n";
    boost::filesystem::create_directory(config_folder);
}

if( !(boost::filesystem::exists(boost::format("%s/%s") % config_folder % Config::fmap[Config::current_hash_function]));
{
    std::cout << "This hash has not been configure before...n";
    std::cout << "Creating folder called " << Config::fmap[Config::current_hash_function] << "n";
    boost::filesystem::create_directory(boost::format("%s/%s") % config_folder % Config::fmap[Config::current_hash_function]);
}

Итак, во-первых, если папка config не существует, создайте это. (эта часть работает) Затем проверьте, существует ли папка current_hash_function, если нет.. создать ее. (эта часть не работает)

ошибка, которую я получаю;

src/neural_networks/shared.cpp:41: error: no matching function for call to ‘exists(boost::basic_format<char, std::char_traits<char>, std::allocator<char> >&)’

причина, по которой я сделал формат boost в fs: exists check, заключается в том, что я не могу создать путь 2 уровня глубоко

2 ответов


на / оператор перегружен для объединения path объекты. Нет необходимости в явном форматировании строк и не нужно беспокоиться о характере разделителя пути для конкретной платформы.

if(!(boost::filesystem::exists(config_folder / Config::fmap[Config::current_hash_function]));

любой операнд может быть std::string пока другой path.


boost::filesystem::exists() требуется аргумент типа boost::filesystem::path или что-то, что неявно конвертируется в него, например std::string, но то, что вы проходите, не является ни тем, ни другим.

следующее должно работать:

if( !( boost::filesystem::exists( str(
               boost::format("%s/%s")
               % config_folder % Config::fmap[Config::current_hash_function])))