Perl File :: Copy :: Recursive fcopy不会在UNC路径上创建目录

当我使用fcopy将文件从UNC路径复制到另一个路径时,如果目标目录不存在,则它不起作用.但它确实在本地路径上工作,(导致创建该目录)

use File::Copy::Recursive qw(fcopy rcopy dircopy fmove rmove dirmove);
use autodie qw'fcopy rmove';

#works. Folder is created, File is copied.
fcopy ("/path/to/file", "/path/to/non/existing/path");

#works too. No need to create a folder.
fcopy ("//path/to/UNC/Share/File", "//path/to/existing/Share");

#doesn't work. 
fcopy ("path/to/UNC/Share/File", ""//path/to/existing/Share/with/non/existing/folder");

它死了

下面的例子

my $file1 = "//server/existing/file"

if (! -f $file1 ) { 
  print "$file1 does not exist";
exit 2;
}

fcopy($file1, "//server/targetDirectory/newFolder"

死了

can't fcopy('//server/existing/file', '//server/targetDirectory/newFolder'): No such file or d

在test.pl第20行的irectory

是不是可以使用UNC路径在samba共享上使用rcopy创建目录,还是这是一个错误?

最佳答案 这是一个错误.
https://rt.cpan.org/Public/Bug/Display.html?id=43328.如果您使用驱动器号来映射远程共享,它确实有效 – 但这并不总是方便的.该错误是在2009年报告的,有人在2010年发布了一个提议的解决方案,但尚未发布包含修复程序的新版本.您可以通过调整File :: Copy :: Recursive的本地副本来尝试建议的解决方案,将sub pathmk的开头更改为以下内容:

sub pathmk {
  my ( $volume, @parts ) = File::Spec->splitpath(shift());
  my $nofatal = shift; 
  @parts = File::Spec->splitdir( File::Spec->catdir(@parts));
  my $pth = File::Spec->catdir($volume,$parts[0]);
  my $zer = 0;

[编辑]我已经发送了包的维护者一封电子邮件,要求发布包含此修复程序的新版本.我检查了修复程序没有破坏与软件包相关的任何测试.

点赞