我一直在尝试递归创建一个文件夹,这意味着当我输入
时 "C:\\test\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaababbaabababaabbababababaabababbabab\\22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\\12345");
它将创建在最后一个条目之前不存在的每个文件夹。我已经尝试过SHCreateDirectoryExW,但是那个不接受比MAX_PATH更长的路径,甚至没有特殊的前缀。是否有一个已经存在的功能,最多32k个字符,或者我必须自己创建一个?我可以创建一个普通文件夹,假设上面的文件夹存在,就好了。
答案 0 :(得分:4)
您需要单独在路径上创建每个目录。将路径解析为其目录组件,然后逐个处理它们。当您遇到不存在的目录时,请创建它,然后向下移动到下一级。
您需要在此处使用的API函数是CreateDirectory
。将完整路径传递给您需要创建的目录。您需要使用带有\\?\
前缀的API的Unicode版本来禁用MAX_PATH
长度限制。
答案 1 :(得分:0)
将路径拆分为其组件。检查每个组件是否存在,或者逐个创建,同时将应用程序当前目录设置为目录。这样您就不会处理完整路径,一次只处理一个(相对)组件。
像这样的伪代码:
split_path();
set_cwd(root);
for (i = 0; i < number_of_components; ++i)
{
if (!does_path_exits(component[i]))
makedir(component[i]);
set_cwd(component);
}
答案 2 :(得分:0)
最后我屈服于Boost,主要是因为它只需要添加一行。
std::tstring widePath = WIDEPATH_PREFIX;
widePath += CStringW(filePath.c_str());
return (boost::filesystem::create_directories(widePath));
我只是将前缀附加到我的文件路径并将其发送到boost。