文件夹不存在则创建,存在则不做任何操作
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 系统)库函数报告错误情况详细信息的常用方法。
我想创建一个名为 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 系统)库函数报告错误情况详细信息的常用方法。