0

目的是使用以下函数在 C++ 中编写实用程序:

BOOL WINAPI CreateDirectoryW(_In_ LPCTSTR lpPathName, _In_opt_LPSECURITY_ATTRIBUTES lpSecurityAttributes)

迄今为止发现的唯一成功尝试似乎是在Perl 脚本中,但让它工作是另一个问题。此脚本试用前缀

my $path = '\\\\?\\' 

但在其他地方观察到使用 "\\?\UNC\" 更可靠。欢迎任何代码块。

编辑:另外,正如原始问题标题所示,问题是将文件夹移动到另一个位置(相对路径除外)。可以使用MoveFileEx移动此路径吗?

4

2 回答 2

3

以下内容来自 MSDN 文档中有关CreateDirectory 函数的内容。

对于 248 个字符的路径,存在默认字符串大小限制。此限制与 CreateDirectory 函数如何解析路径有关。

要将此限制扩展到 32,767 个宽字符,请调用函数的 Unicode 版本并在路径前添加“\?\”。有关详细信息,请参阅命名文件。

请注意,在 C++ 中,与在 Perl 中一样,除非您使用原始字符串文字,否则必须对源代码中的 \ 字符进行转义。因此它在源代码中是“\\?\”。

这是一个如何做的简单例子。

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;
}
于 2015-08-06T14:31:50.480 回答
0

会创建和删除嵌套的长路径,但不会移动它们。
移动本质上意味着创建一个新树,其中主要的编码挑战是处理具有不同权限或属性的路径。

于 2016-05-04T11:43:09.737 回答