目的是使用以下函数在C ++中编写实用程序:
BOOL WINAPI CreateDirectoryW(_In_ LPCTSTR lpPathName, _In_opt_LPSECURITY_ATTRIBUTES lpSecurityAttributes)
迄今为止发现的唯一成功尝试似乎是Perl script,但获得that to work是另一个问题。此脚本试用前缀
my $path = '\\\\?\\'
但在其他地方已经观察到使用“\\?\ UNC \”更可靠。 任何代码块都是受欢迎的。
编辑:此外,正如原始问题标题所示,问题是将文件夹移动到另一个位置(相对路径除外)。可以使用MoveFileEx移动此路径吗?
答案 0 :(得分:3)
以下内容来自CreateDirectory function上的MSDN文档。
对于248个字符的路径,存在默认字符串大小限制。此限制与CreateDirectory函数如何解析路径有关。
要将此限制扩展为32,767个宽字符,请调用该函数的Unicode版本并在路径前加上“\?\”。有关详细信息,请参阅Naming a File.
请注意,在C ++中,与Perl一样,除非使用Raw String Literals,否则必须转义源代码中的\字符。因此它会 “\\?\” 在源代码中。
以下是如何操作的简单示例。
BOOL CreatDirWithVeryLongName()
{
BOOL ret = ::CreateDirectoryW(L"\\\\?\\C:\\This is an example directory that has an extreemly long name that is more than 248 characters in length to serve as an example of how to go beyond the normal limit - Note that you will not be able to see it in Windows Explorer due to the fact that it is limited to displaying files with fewer than 260 characters in the name", NULL);
return ret;
}
答案 1 :(得分:0)
This创建并删除嵌套的长路径,但不移动它们 移动本质上意味着创建一个新的树,其中主要的编码挑战是处理具有不同权限或属性的路径。