注意:这个问题是关于新支持的win32长路径 https://superuser.com/questions/1119883/windows-10-enable-ntfs-long-paths-policy-option-missing(自 Windows 10 版本 1607,内部版本 14352 起可用),而不是关于以以下开头的扩展 UNC 路径\\?\
.
我通过组策略启用了长路径支持并重新启动了我的电脑。我在注册表中检查了两者HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem\LongPathsEnabled
and HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
被设置为1
.
然后我打开一个 Python REPL 并尝试创建一个超过 260 个字符限制的目录,但失败了:
>>> import os
>>> longdirname = 'a' * 300
>>> longdirname
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
>>> os.makedirs(longdirname)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\os.py", line 157, in makedirs
mkdir(name, mode)
WindowsError: [Error 3] The system cannot find the path specified: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
[Error 3] The system cannot find the path specified: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
我假设长路径支持在某种程度上没有在这里生效。这是为什么?如何正确启用它,以便它可以通过 Python 脚本运行?
更新:我还尝试通过 pywin32 直接调用 Win32 API 函数,该函数声称在其文档中 https://msdn.microsoft.com/en-us/library/windows/desktop/aa363855(v=vs.85).aspxn 它应该支持长路径,但又失败了:
>>> import win32file
>>> longname = 'a' * 300
>>> win32file.CreateDirectoryW(longname, None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
error: (3, 'CreateDirectoryW', 'The system cannot find the path specified.')
(3, 'CreateDirectoryW', 'The system cannot find the path specified.')
更新 2:还尝试通过单独的组件创建:
>>> for i in range(1, 300):
... win32file.CreateDirectoryW('a', None)
... os.chdir('a')
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
error: (206, 'CreateDirectoryW', 'The filename or extension is too long.')
(206, 'CreateDirectoryW', 'The filename or extension is too long.')
(os.makedirs
在这种情况下也不起作用)
更新 3:以下批处理脚本将not fail:
@echo off
setlocal enableextensions enabledelayedexpansion
pushd
set /a count = 1
for /L %%i in (1,1,300) do (
mkdir a
cd a
echo %%i
)
endlocal
popd
所以我假设这与 Python 有某种关系。