perl - Perl chmod 文件超过 260 个字符限制路径长度
问题描述
我已按照https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation#enable-long-paths-in-windows-10中的说明启用了 Windows 10 长路径-version-1607-and-later 我这样做了,所以我可以在 perl 中对超过 260 个字符的 Windows 最大路径长度限制的文件进行 chmod。
my $ret = chmod(oct(0555), '<path_length_greater_than_260_characters>\somefile.txt');
print "$ret\n";
它无法 chmod,$ret
是0
. 我有哪些选择?
解决方案
每个函数有两个版本接受/返回一个字符串,一个 A(NSI) 版本接受/返回使用 ANSI/Active 代码页编码的字符串,一个 W(ide) 版本接受/返回一个编码的字符串使用 UTF-16le。
Perl 使用A
函数的版本。
您所做的更改仅适用于某些W
功能。
如果您选择加入长路径行为,这些目录管理功能将不再具有 MAX_PATH 限制:CreateDirectoryW、CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW。
如果您选择加入长路径行为,这些文件管理函数不再具有 MAX_PATH 限制:CopyFileW、CopyFile2、CopyFileExW、CreateFileW、CreateFile2、CreateHardLinkW、CreateSymbolicLinkW、DeleteFileW、FindFirstFileW、FindFirstFileExW、FindNextFileW、GetFileAttributesW、GetFileAttributesExW、SetFileAttributesW、 GetFullPathNameW、GetLongPathNameW、MoveFileW、MoveFileExW、MoveFileWithProgressW、ReplaceFileW、SearchPathW、FindFirstFileNameW、FindNextFileNameW、FindFirstStreamW、FindNextStreamW、GetCompressedFileSizeW、GetFinalPathNameByHandleW。
您可以使用Win32::Unicode来访问其中的大部分。您还可以使用Win32::API或FFI::Platypus访问它们。
顺便说一句,您还可以通过在路径前加上前缀\\?\
(或替换\\
为\\?\UNC\
已经以 开头的路径\\
)来绕过限制。例如,某些形式\\?\d:\dir\file
将被限制为 32,767 个字符而不是 260 个字符。即使没有启用 OP 中提到的功能,这也有效。也就是说,这也仅适用于W
功能。
推荐阅读
- google-chrome - Chrome 2019 - 如何禁用详细控制台消息
- python-3.x - 在 TabularDataBunch.from_df() 中寻找有关“路径”参数的文档
- python - wxPython 写入禁用的 wx.TextCtrl
- javascript - 发送的响应延迟了 1 个响应
- javascript - JS:使用带有 querySelector 或 getElementsByTagName 的“实时”列表与非实时 querySelectorAll 相比有什么用?
- typescript - 打字稿选择/取消选择所有复选框
- javascript - 如何将ajax请求的响应分配给变量
- python-3.x - 在 Python 中,如何使用字典为 Zeep 设置 _soapheaders?
- ruby-on-rails - 如何将 html 文件添加到活动管理页面并使其成为页面的一部分?
- python - 在 Linux 上使用 python 调整终端窗口的大小