在 Windows 中创建和移动超过 260 个字符的路径名的程序
Program to Create and Move a Pathname with more than 260 characters in Windows
目的是使用以下函数在 C++ 中编写一个实用程序:
BOOL WINAPI CreateDirectoryW(_In_ LPCTSTR lpPathName, _In_opt_LPSECURITY_ATTRIBUTES lpSecurityAttributes)
到目前为止发现的唯一成功的尝试似乎是 Perl script, but getting that to work 是另一个问题。此脚本试用前缀
my $path = '\\?\'
但在别处观察到使用“\\?\UNC\”更可靠。
欢迎任何代码块。
编辑:此外,如原始问题标题所示,问题是将文件夹移动到另一个位置(相对路径除外)。这个路径可以用MoveFileEx移动吗?
以下内容来自 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;
}
This 创建和删除嵌套的长路径,但不移动它们。
移动本质上意味着创建一个新树,其中主要的编码挑战是处理具有不同权限或属性的路径。
目的是使用以下函数在 C++ 中编写一个实用程序:
BOOL WINAPI CreateDirectoryW(_In_ LPCTSTR lpPathName, _In_opt_LPSECURITY_ATTRIBUTES lpSecurityAttributes)
到目前为止发现的唯一成功的尝试似乎是 Perl script, but getting that to work 是另一个问题。此脚本试用前缀
my $path = '\\?\'
但在别处观察到使用“\\?\UNC\”更可靠。 欢迎任何代码块。
编辑:此外,如原始问题标题所示,问题是将文件夹移动到另一个位置(相对路径除外)。这个路径可以用MoveFileEx移动吗?
以下内容来自 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;
}
This 创建和删除嵌套的长路径,但不移动它们。
移动本质上意味着创建一个新树,其中主要的编码挑战是处理具有不同权限或属性的路径。