Каков лучший способ в Perl для копирования файлов в yet-to-be-created дерево каталогов?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

20
задан Peter Mortensen 9 January 2014 в 08:40
поделиться

4 ответа

use File::Path;
use File::Copy;

my $path = "tardir/dest1/dest2/";
my $file = "test.txt";

if (! -d $path)
{
  my $dirs = eval { mkpath($path) };
  die "Failed to create $path: $@\n" unless $dirs;
}

copy($file,$path) or die "Failed to copy $file: $!\n";
30
ответ дан 29 November 2019 в 23:37
поделиться
use File::Basename qw/dirname/;
use File::Copy;

sub mkdir_recursive {
    my $path = shift;
    mkdir_recursive(dirname($path)) if not -d dirname($path);
    mkdir $path or die "Could not make dir $path: $!" if not -d $path;
    return;
}

sub mkdir_and_copy {
    my ($from, $to) = @_;
    mkdir_recursive(dirname($to));
    copy($from, $to) or die "Couldn't copy: $!";
    return;
}
8
ответ дан 29 November 2019 в 23:37
поделиться

File::Copy::Recursive :: fcopy () является неосновным, но комбинирует File::Path::mkpath () и File::Copy::copy () решение во что-то еще короче и сохраняет полномочия в отличие от File::Copy. Это также содержит другие изящные служебные функции.

5
ответ дан 29 November 2019 в 23:37
поделиться

См. другие ответы для того, чтобы сделать копирование, но для создания Пути каталога :: Класс очень хорош использовать:

use Path::Class;

my $destination_file  = file('tardir/dest1/dest2/test.txt');
$destination_file->dir->mkpath;

# ... do the copying here
1
ответ дан 29 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: