C ++: мне нужна помощь с навигацией по каталогу - PullRequest
1 голос
/ 06 мая 2011

Итак, я хочу иметь возможность chdir в каталог, если он существует, если не сделать каталог. Если я уже в каталоге, мне ничего не нужно делать.

Пример

if (cur_dir == "dir_name")
// do stuff
else if ("dir_name" not exist?)
   mkdir "dir_name"
   chdir "dir_name"
else
   chdir "dir_name"

Я гуглил, я до сих пор придумал это:

if (chdir(Config::CONFIG_FOLDER_NAME) == 0)
{
    std::cout << "Network Config Directory not found...\n";
    std::cout << "Creating folder called " << Config::CONFIG_FOLDER_NAME << "\n";
    mkdir(Config::CONFIG_FOLDER_NAME, 0777);
}

Я еще не нашел способ проверить, что является текущим каталогом .. (не полный путь, который я нашел.)

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Если у вас есть Boost, вы можете использовать Boost.Filesystem :

namespace fs = boost::filesystem;

fs::path configFolder(Config::CONFIG_FOLDER_NAME);

// Check if the current directory isn't already config folder
if (!fs::equivalent(configFolder, fs::current_path())
{
    // Create config folder if it doesn't exist
    if (!fs::exists(configFolder))
       fs::create_directory(configFolder);

    // Change working directory to config folder
    fs::current_path(configFolder);
}

Кстати, если вы просто планируете читать конфигурационный файл, вам не нужно менять рабочий каталог. Просто читайте напрямую, используя абсолютный путь. В Boost.Filesystem вы можете сделать это следующим образом:

fs::path configFilePath = configFolder;
configFilePath /= "config.file";

// read configFilePath
0 голосов
/ 06 мая 2011

Я думаю getcwd () - это то, что вам нужно.

0 голосов
/ 06 мая 2011

Если у вас есть полный путь, просто проанализируйте его и посмотрите на последний сегмент (часть после последнего "/").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...