C++: Boost: нужна помощь с логикой навигации по каталогам

Итак, я пытаюсь изменить свой каталог для сохранения файлов, а затем вернуться в каталог, в котором я был ранее.

По сути:

cd folder_name
<save file>
cd ../

Вот код, который у меня есть до сих пор:

void save_to_folder(struct fann * network, const char * save_name)
{
    boost::filesystem::path config_folder(Config::CONFIG_FOLDER_NAME);
    boost::filesystem::path parent_folder("../");


    if( !(boost::filesystem::equivalent(config_folder, boost::filesystem::current_path())))
        {
            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);
            }
            boost::filesystem::current_path(config_folder);
        }

    fann_save(network, save_name);
    boost::filesystem::current_path(parent_folder);

}

В настоящее время при каждом вызове метода происходит следующее:
Папка не существует: создается
Папка не существует: создается

Это не часть cd ../. знак равно

поэтому моя структура каталогов выглядит так:

имя_папки
- имя_папки
-- имя_папки
--- имя_папки


person NullVoxPopuli    schedule 09.05.2011    source источник
comment
Я думаю, вы можете удалить последнюю строку кода boost::filesystem::current_path(parent_folder);. Всякий раз, когда вы входите в функцию, вы устанавливаете путь к папке, с которой хотите работать.   -  person Purnima    schedule 09.05.2011
comment
Я бы не использовал ../ для родительской папки, а просто...   -  person Bo Persson    schedule 09.05.2011


Ответы (2)


Согласно документам, метод current_path немного опасен, потому что он может быть изменен другими программами одновременно.

Поэтому, вероятно, было бы лучше работать из CONFIG_FOLDER_NAME.

Можете ли вы передать более длинный путь к fann_save? что-то типа:

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);
}
fann_save(network, (boost::format("%s/%s") % config_folder % save_name).str().c_str());

в противном случае, если вы довольны использованием current_path или не можете использовать больший путь в fann_save, я бы попробовал что-то вроде:

boost::filesystem::path up_folder((boost::format("%s/..") % Config::CONFIG_FOLDER_NAME).str());
boost::filesystem::current_path(up_folder);
person Vusak    schedule 09.05.2011

Можете ли вы попробовать с этим кодом вместо этого.

void save_to_folder(struct fann * network, const char * save_name)
{
    boost::filesystem::path configPath(boost::filesystem::current_path() / Config::CONFIG_FOLDER_NAME);

   if( !(boost::filesystem::exists(configPath)))
   {
       std::cout << "Network Config Directory not found...\n";
       std::cout << "Creating folder called " << Config::CONFIG_FOLDER_NAME << "\n";
       boost::filesystem::create_directory(configPath);
   }
   fann_save(network, save_name);
}
person Purnima    schedule 09.05.2011