注意:本问题涉及新支持的win32长路径(自Windows 10版本1607,Build 14352可用),而不是以
我通过组策略启用了长路径支持并重新启动了我的电脑。我在注册表中检查了两个键值
然后我打开了Python REPL并尝试创建一个超过260个字符限制的目录,但失败了。
我假设长路径支持在这里没有生效。为什么会这样,如何才能正确启用它,以便从Python脚本中使用?
所以我假设这与Python有关。
\\?\
开头的扩展UNC路径。
我通过组策略启用了长路径支持并重新启动了我的电脑。我在注册表中检查了两个键值
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem\LongPathsEnabled
和 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函数,在其文档中声称它应该支持长路径,但仍然失败了:
>>> 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:以下批处理脚本将不会失败:
@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有关。
a
的300级深度目录路径。请查看我的更新。 - Tamás Szelei