【问题标题】:Suppress error: Can't chmod() in Archive::Zip抑制错误:不能在 Archive::Zip 中使用 chmod()
【发布时间】:2016-04-20 17:42:51
【问题描述】:

我正在尝试使用 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 allowed

我试图找到一种方法在 Archive::Zip 中隐藏此消息,但无法找到任何方法来做到这一点。我无法更改服务器的权限。隐藏此消息的最佳方法是什么?

谢谢你, -安德烈

【问题讨论】:

    标签: perl zip archive


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我尝试了解决方案,但它不起作用。 print 语句打印 666。它不会将其更改为 644。
    • 打印显示旧权限值,因为 unixFileAttributes 在用于设置值时返回旧值。
    • 是为存档中的所有文件还是仅打印一个警告“错误:无法 chmod() /test/test.txt:不允许操作”?在此处显示ls -la /test 命令的内容。制作小型存档,它会重复此错误并可以从某处下载。您使用的是哪个版本的 Archive::Zip?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多