文件夹不存在则创建,存在则不做任何操作

Create folder if it doesn't exist, do nothing if it does

我想创建一个名为 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 失败是因为字符串无效还是因为字符串有效但文件夹已经存在?

如评论所述,在 mkdir - 创建目录 - 手册页中提到,如果 [EEXIST] -> 命名文件存在,mkdir 可能会出现的错误之一.所以它失败了。请参阅 Whosebug 上的 here for the mkdir main page. And here is a possible duplicate

How can I check if mkdir fails because the string was invalid or because the string was vaild but the folder already existed?

Return 来自 mkdir() 的代码显示功能是否成功。如果失败,你应该检查特殊变量 errno,详细信息可以在 man 上找到 第

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_error( strerror(errno) );
    }
}

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