Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++: Boost: how do I check the existence of a folder inside another folder in my working directory?

code:

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]);
}

So, first, if the config folder doesn't exist, create that. (this part works) Next, check if the current_hash_function folder exists, if not.. create it. (this part doesn't work)

The error I'm getting;

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> >&)’

reason why I did the boost format in the fs:exists check, is because I don't how to create a path 2 levels deep

like image 378
NullVoxPopuli Avatar asked May 12 '11 17:05

NullVoxPopuli


1 Answers

The / operator is overloaded to concatenate path objects. No need for explicit string formatting, and no need to worry about the platform-specific path-separator character, either.

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

Either operand can be a std::string as long as the other is a path.

like image 162
Rob Kennedy Avatar answered Oct 06 '22 06:10

Rob Kennedy