创建文件夹(如果不存在),如果不存在则不执行任何操作

时间:2016-03-11 14:15:55

标签: c++ linux directory mkdir

我想创建一个名为sessionname的文件夹。如果已存在具有此名称的文件夹,则可以,我不想做任何事情。

现在我这样做:

finalpath = "/home/Documents"    
finalpath.append(path + "/" + sessionname);
    if (mkdir(finalpath.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1)
    {
        //INVALID PATH
        std::cout << "path is invalid, cannot create sessionnamefolder" << std::endl;
        throw std::exception();
    }

如果文件夹/home/Documents/sessionname存在,则代码错误,因为无法创建文件夹。

如何判断mkdir是否因为字符串无效或字符串是否为vaild但文件夹已存在而失败?

2 个答案:

答案 0 :(得分:4)

  

如何判断mkdir是否因为字符串无效或字符串是否为vaild但文件夹已存在而失败?

mkdir()的返回代码显示功能是否成功。如果失败,您应该检查特殊变量errno,详细信息可以在man page

上找到
if (mkdir(finalpath.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1)
{
    if( errno == EEXIST ) {
       // alredy exists
    } else {
       // something else
        std::cout << "cannot create sessionnamefolder error:" << strerror(errno) << std::endl;
        throw std::runtime_exception( strerror(errno) );
    }
}

注意:这是Linux / Unix(和其他POSIX系统)库函数报告错误情况详细信息的常用方法。

答案 1 :(得分:1)

如评论所述,它在mkdir上提到 - 制作一个目录 - 手册页,其中一个错误是mkdir,如果[EEXIST] - &gt;命名文件存在。所以它失败了。有关mkdir主页,请参阅here。这里有一个可能的duplicate堆栈溢出。