如果目标目录不存在,如何强制提取失败?

Posted

技术标签:

【中文标题】如果目标目录不存在,如何强制提取失败?【英文标题】:How do I force extraction to fail if the destination directory doesn't exist? 【发布时间】:2016-01-18 18:32:13 【问题描述】:

我正在使用 Perl 5.16.3 和 Archive::Extract

我正在解压一个 zip 文件,但如果目标目录不存在,我希望 Perl 失败(死)。目前以下代码不会失败,但会在提取之前创建目录

use Archive::Extract;
...

my $ae = Archive::Extract->new( archive => $downloadedFile, type => 'zip' );
my $ok = $ae->extract( to => $deployDir ) or die $ae->error;

如果目标目录不存在,我该如何强制执行?

【问题讨论】:

可以使用类似:die "$deployDir does not exist" unless -d $deployDir 【参考方案1】:

模块中没有任何内容允许您禁用目录的自动创建,因此您只需在 extract 调用之前的单独语句中检查它

-d $deployDir or die Deployment directory "$deployDir" doesn't exist;

或者您可以使用autodie 并尝试将其作为目录打开。这样,系统将为您生成die 消息。像这样


    use autodie;
    opendir my ($dh), $deployDir;

这需要 Perl v5.10.1 或更高版本。代码周围的大括号 ... 是必需的。它们限制了autodie的范围,并立即再次自动关闭目录句柄

【讨论】:

以上是关于如果目标目录不存在,如何强制提取失败?的主要内容,如果未能解决你的问题,请参考以下文章

(18)文件和目录管理类的常用命令3

添加不存在的目标时强制 CMake target_link_libraries 失败

Linux:如果目标目录不存在,则复制并创建它

Linux之mv命令

mv&cp

cp命令