直接上代码
DIR* pDir;
std::string filedir =
getenv("HOME") + node_options_.root_file_directory + "/map";
if (!(pDir = opendir(filedir.c_str()))) {
LOG(INFO) << "Folder doesn't Exist! create it";
if (!createFolder(filedir)) {
LOG(INFO) << "create filedir failed";
response.status.code = cartographer_ros_msgs::StatusCode::ABORTED;
response.status.message = "create filedir failed";
return true;
}
closedir(pDir);
}
此代码copy他人
bool createFolder(const std::string path) {
LOG(INFO) << "path : " << path;
if (!access(path.c_str(), F_OK) || path == "") {
return true;
}
//从字符串末尾开始查找‘/’
size_t pos = path.rfind("/");
if (pos == std::string::npos) {
LOG(INFO) << "no find '/'";
return false;
}
std::string upper_path = path.substr(0, pos);
if (createFolder(upper_path)) {
// S_IRWXU|S_IRWXG|S_IRWXO目录访问权限
if (mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO)) {
// EEXIST表示目录已经存在
if (errno != EEXIST) {
LOG(INFO) << "failed to create folder : " << path;
return false;
}
}
return true;
}
return false;
}