SetCurrentDirectoryW中的长路径名

时间:2017-06-06 12:07:59

标签: windows winapi visual-c++ visual-studio-2015

使用this msdn reference我创建了一个小用例。

#include <iostream>
#include <windows.h>

int main()
{

    const std::wstring dir_path = L"\\\\?\\c:\\temp\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory\\ThisIsPrettyLongNameForDirectory";

    if (!CreateDirectoryW(dir_path.c_str(), NULL))
    {
        std::cout << " Error occurred while creation of directory!!!  " << GetLastError() << std::endl;     
    }
    else
    {
        std::cout << "Lenth is " << dir_path.length() << std::endl;

        if (dir_path.length() > 255)
        {
            if (!SetCurrentDirectoryW(buf.c_str()))
            {
                std::cout << " Error occurred!!!  " << GetLastError() << std::endl;
            }
            else
            {
                std::cout << " Successful!!!" << std::endl;
            }
        }
    }
    return 0;   
}

但是,我得到的输出为

Error occurred while creation of directory!!!  3

Error code 3指向我

ERROR_PATH_NOT_FOUND
3 (0x3)
The system cannot find the path specified.

有没有其他方法可以在我不知道的CreateDirectoryW或SetCurrentDirectoryW API中使用长路径名?

PS:我在Windows 7上使用VS 2015 Update 3编译器。

1 个答案:

答案 0 :(得分:1)

您必须逐个创建路径上的每个目录。因此,在您调用CreateDirectory之前,您传递的目录的父目录必须存在。

阅读文档可以找到此信息。它专门调出了错误代码并说:

  

不存在一个或多个中间目录;此函数只会在路径中创建最终目录。