使用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编译器。
答案 0 :(得分:1)
您必须逐个创建路径上的每个目录。因此,在您调用CreateDirectory
之前,您传递的目录的父目录必须存在。
阅读文档可以找到此信息。它专门调出了错误代码并说:
不存在一个或多个中间目录;此函数只会在路径中创建最终目录。