Как я могу рекурсивно скопировать содержание каталога с помощью Perl?

В методах C# не являются виртуальными по умолчанию, поэтому если Вы разрабатываете некоторый метод, столь же переопределяемый, необходимо определить его как виртуальный:

class Base 
{
  protected virtual string GetMood() {...}
}
114-секундный, необходимо определить, что Вы идете в переопределенный метод от базового класса в производном классе.

class Derived : Base
{
  protected override string GetMood() {...}
}

, Если Вы не определяете ключевое слово "переопределения", Вы получите метод, который скрывает базовый тип (и предупреждение из компилятора для помещения "нового" ключевого слова для метода для явного утверждения так).

, Если Вы хотите остановить цепочку наследования и запретить дальнейшие переопределения метода, необходимо отметить метод, как изолировано, как это:

  protected sealed override string GetMood() {...}
5
задан Powerlord 13 July 2009 в 14:09
поделиться

2 ответа

Взгляните на File :: Copy :: Recursive .

14
ответ дан 18 December 2019 в 13:17
поделиться

Если вы просто копируете файлы и не обрабатываете их, нет причин не использовать xcopy .

Теперь я написал сценарий ниже на свет комментариев Телемаха, чтобы дать вам отправную точку. Лично я бы использовал xcopy для копирования и File :: Find , если необходимо обработать содержимое файла. Кроме того, я уверен, что в приведенном ниже коде около 37 ошибок. Но, если вы хотите поиграть, это может быть поучительно:

#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

die "mydeepcp src-dir target-dir\n" unless @ARGV == 2;

my ($src, $target) = @ARGV;
mydeepcp( $src => $target );

sub mydeepcp {
    my ($src, $target) = @_;

    opendir my $dir_h, $src
        or die "Cannot open directory: '$src': $!";

    while ( my $file = readdir $dir_h ) {
        next if $file =~ m{^\.\.?$};
        my $src_path = catfile $src => $file;
        my $target_path = catfile $target => $file;

        if ( -d $src_path ) {
            # FIXME: insert code somewhere to create destination dir 
            mydeepcp($src_path => $target_path);
        }
        elsif ( -f _ ) {
            if ( my $err = docp($src_path => $target_path) ) {
                warn sprintf(
                    "Error copying '%s' from '%s' to '%s': %s\n",
                    $file, $src, $target, $err
                );
            }
        }
        else {
            warn "Skipping '$src_path'\n";
        }
    }

    closedir $dir_h;
    return;
}

sub docp {
    my ($src, $target) = @_;
    warn "'$src' => '$target'\n";
    return;
}

__END__

Вывод:

C:\Temp> ghj c:\windows f:\qwert
...
'C:\windows\$hf_mig$\KB899591\update\spcustom.dll' => 'F:\qwert\$hf_mig$\KB899591\update\spcustom.dll'
'C:\windows\$hf_mig$\KB899591\update\update.exe' => 'F:\qwert\$hf_mig$\KB899591\update\update.exe'
'C:\windows\$hf_mig$\KB899591\update\update.ver' => 'F:\qwert\$hf_mig$\KB899591\update\update.ver'
0
ответ дан 18 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

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