Suppress error: Can't chmod() in Archive::Zip

Suppress error: Can't chmod() in Archive::Zip

我正在尝试使用 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);
}

我在 运行 脚本时收到以下警告:

error: Can't chmod() /test/test.txt: Operation not permitted

我试图在 Archive::Zip 中找到抑制此消息的方法,但找不到任何方法。我无法更改服务器的权限。抑制此消息的最佳方法是什么?

谢谢, -安德烈

您的脚本尝试提取的存档在文件 test.txt 中创建时存在一些权限问题。由于某些原因,无法在您的系统中更改此权限,因此您收到此错误。

您可以通过在提取行 $member->extractToFileNamed() 之前添加 $member->unixFileAttributes(0644); 来修复此权限。您也可以尝试通过打印此权限来调查真正的原因:printf "%o - %s\n", $member->unixFileAttributes(0644), $member->fileName();

$member->unixFileAttributes(0644); 似乎不起作用,因为正在网络驱动器上提取文件。 我通过使用解决了这个问题:

Archive::Zip::setErrorHandler( \&zipErrorHandler );