代码
/**
* 创建目录
* @param directoryPath 目录路径
*/
void CreateDir(const std::string& directoryPath)
{
std::string tmpDirPath;
for (uint32_t i = 0; i < directoryPath.size(); ++i)
{
tmpDirPath.push_back(directoryPath[i]);
// 检查是否需要创建目录
if (tmpDirPath[i] == '/')
{
// 检查目录是否已存在
if (_access(tmpDirPath.c_str(), 0) != 0)
{
// 创建目录
int32_t ret = _mkdir(tmpDirPath.c_str());
if (ret != 0)
{
// 创建目录失败,退出函数
return;
}
}
}
}
// 创建完整目录路径
_mkdir(tmpDirPath.c_str());
}
解释
这段代码创建一个名为 CreateDir 的函数,用于创建一个目录。该函数接受一个字符串类型的目录路径作为参数,并逐级检查并创建目录,直到到达传递的完整目录路径为止。具体来说,该函数的实现分为以下步骤:
- 创建一个名为 tmpDirPath 的字符串来保存每一级的目录路径。
- 使用 for 循环迭代传入的目录路径,将每一级的路径添加到 tmpDirPath 中。
- 在每一级路径添加完成后,检查最后一个字符是否为目录分隔符 ‘/’。
- 如果是,使用 _access 函数检查该目录是否已存在,如果不存在则使用 _mkdir 函数创建该目录。
- 如果在任何一级目录上无法创建目录,则退出函数。
- 循环结束后,创建完整的目录路径。
该函数使用了 _access 和 _mkdir 函数来检查和创建目录。_access 函数用于检查目录是否存在,如果返回 0,则目录存在,如果返回 -1,则目录不存在。_mkdir 函数用于创建目录。如果函数返回 0,则目录创建成功,如果返回 -1,则创建目录失败。在本代码中,如果 _mkdir 函数返回错误,函数将立即退出并不会尝试创建其余的目录。