В методах C# не являются виртуальными по умолчанию, поэтому если Вы разрабатываете некоторый метод, столь же переопределяемый, необходимо определить его как виртуальный:
class Base
{
protected virtual string GetMood() {...}
}
114-секундный, необходимо определить, что Вы идете в переопределенный метод от базового класса в производном классе.
class Derived : Base
{
protected override string GetMood() {...}
}
, Если Вы не определяете ключевое слово "переопределения", Вы получите метод, который скрывает базовый тип (и предупреждение из компилятора для помещения "нового" ключевого слова для метода для явного утверждения так).
, Если Вы хотите остановить цепочку наследования и запретить дальнейшие переопределения метода, необходимо отметить метод, как изолировано, как это:
protected sealed override string GetMood() {...}
Если вы просто копируете файлы и не обрабатываете их, нет причин не использовать 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'