如何在C ++中递归创建一个超过MAX_PATH的目录?

时间:2013-12-16 12:46:30

标签: c++ windows winapi directory

我一直在尝试递归创建一个文件夹,这意味着当我输入

"C:\\test\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaababbaabababaabbababababaabababbabab\\22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\\12345");

它将创建在最后一个条目之前不存在的每个文件夹。我已经尝试过SHCreateDirectoryExW,但是那个不接受比MAX_PATH更长的路径,甚至没有特殊的前缀。是否有一个已经存在的功能,最多32k个字符,或者我必须自己创建一个?我可以创建一个普通文件夹,假设上面的文件夹存在,就好了。

3 个答案:

答案 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。