CreateDirectoryW 只能创建单层目录。如果目标路径包含多级目录,而中间层级尚不存在,调用就会失败。

例如,要创建目录 1\2\3,本意是建立文件夹 3,但如果 1 和 2 都不存在,操作就会返回错误。

解决方案之一是采用递归方式:先尝试创建目标目录,若失败则递归地创建父目录,再重新创建目标目录。

#include<iostream>
                #include<fstream>
                #include"windows.h"
                #include "math.h"
                #include<vector>
                #include <direct.h>
                using namespace std;
                
                LPWSTR toUnicode11(const char* _str)
                {
                	LPWSTR _ret;
                	int _len = strlen(_str) * 2;
                
                	_ret = new WCHAR[_len];
                
                	MultiByteToWideChar(CP_ACP, 0, _str, -1, _ret, _len);
                
                	return _ret;
                }
                
                void  CreateDir(string dir)
                {
                	if (CreateDirectoryW(toUnicode11(dir.c_str()), 0) == 0)
                	{
                		//error
                        if(string::npos == dir.find('\\'))return;
                
                		int i = dir.size();
                		for (; i >= 0; i--)
                		{
                			if (  dir[i]=='\\' )break;;
                
                		}
                		CreateDir(dir.substr(0,i ));
                		CreateDirectoryW(toUnicode11(dir.c_str()), 0);
                	}
                
                }
                
                
                int main()
                {
                    string path="12\\54\\63\\.324\\4";
                	CreateDir(path);
                
                	return 0;
                }