如果文件夹不存在则创建文件夹,如果存在则什么都不做

Pet*_*111 1 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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Sla*_*ica 5

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

返回代码mkdir()显示函数是否成功。如果失败,您应该检查特殊变量errno,详细信息可以在手册页上找到

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) );
    }
}
Run Code Online (Sandbox Code Playgroud)

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