C ++:我需要有关目录导航的帮助

时间:2011-05-06 15:35:33

标签: c++ file-io directory

所以,我希望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 个答案:

答案 0 :(得分:3)

如果你有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

答案 1 :(得分:0)

如果你有完整的路径,那么只需解析它并查看最后一段(最后一段“/").

答案 2 :(得分:0)

我认为getcwd()就是您所需要的。