我正在尝试使用Archive :: Zip提取一些文件。 一切都很好。正在提取文件而没有任何问题。以下是代码的部分:
my $zip = Archive::Zip->new($file);
foreach my $member ($zip->members) {
next if $member->isDirectory;
(my $extractName = $member->fileName) =~ s{.*/}{};
$member->extractToFileNamed($unixPath{'Rdrive'}.$extractName);
}
运行脚本时收到以下警告:
错误:无法chmod()/test/test.txt:不允许操作
我试图在Archive :: Zip中找到一种方法来抑制此消息,但无法找到任何方法来执行此操作。我无法更改服务器的权限。抑制此消息的最佳方法是什么?
谢谢你, -Andrey
答案 0 :(得分:0)
您的脚本尝试提取的存档是在文件test.txt
的权限问题上创建的。由于某些原因,您的系统无法对此权限进行修改,因此您收到此错误。
您可以在提取行$member->unixFileAttributes(0644);
之前添加$member->extractToFileNamed()
来修复此权限。您也可以尝试通过打印此权限来调查真正的原因:printf "%o - %s\n", $member->unixFileAttributes(0644), $member->fileName();
答案 1 :(得分:0)
$ member-> unixFileAttributes(0644); 似乎不起作用,因为文件是从网络驱动器上提取的。 我使用以下方法解决了这个问题:
Archive::Zip::setErrorHandler( \&zipErrorHandler );