使用Windows的API创建多层级文件夹
#include
#include
#include
#include
#include
#include
//创建多层级文件夹
bool CreateDir(const std::string& path)
{
std::vector<std::string> paths;
std::string current_dir;
size_t start_pos = 0;
size_t end_pos;
while ((end_pos = path.find_first_of("\\/", start_pos)) != std::string::npos)
{
current_dir = path.substr(0, end_pos);
paths.emplace_back(current_dir);
start_pos = end_pos + 1;
}
paths.emplace_back(path);
paths.emplace_back(path);//第二次创建会返回“目录已存在”的错误,即创建文件夹成功!
for (auto ph : paths)
{
int num = MultiByteToWideChar(CP_ACP, 0, ph.c_str(), -1, NULL, 0);
wchar_t* wide = new wchar_t[num];
MultiByteToWideChar(CP_ACP, 0, ph.c_str(), -1, wide, num);
std::wstring wcpath(wide);
delete[] wide;
CreateDirectory(wcpath.c_str(), NULL);
}
DWORD error = GetLastError();
if (error == ERROR_ALREADY_EXISTS)//目录已存在
return true;
else
return false;
}
int main()
{
std::string path = "E:\\li\\123/可行\\abc";
bool ret = CreateDir(path);
if (ret)
std::cout << path << std::endl << "创建成功!" << std::endl;
std::cin.get();
return 0;
}
输出:
E:\li\123/可行\abc
创建成功!