У мене є сценарій FTP Perl, і я хочу переконатисячи завершено передачу файлу шляхом перевірки кількості байтів, які передаються на віддалений сервер, рівним фактичним байтам файлу на локальному сервері. Як я міг це досягти?
Ось що я маю до цих пір:
my $ftp = Net::FTP->new($host, Debug => 1)
or die "Could not connect to "$host": $@";
$ftp->login($user, $pw)
or die sprintf "Could not login: %s", $ftp->message;
$ftp->cwd($path)
or die sprintf "Could not login: %s", $ftp->message;
$ftp->ls;
$ftp->binary;
$ftp->get($file)
or die sprintf "Could not login: %s", $ftp->message;
Відповіді:
6 за відповідь № 1з документів ви можете використовувати розмір ()
розмір (FILE) Повертає розмір у байтах длязаданий файл як збережений на віддаленому сервері. ПРИМІТКА. Розмір повідомленого розміру - це розмір збереженого файлу на пульті сервер. Якщо файл згодом передається з сервера в ASCII режим та віддалений сервер та локальна машина мають різні уявлення про "End Of Line", то розмір файлу на локальній машині після передачі можуть бути різними.
Код:
my $host="127.0.0.1";
my $user="anonymous";
my $pw = "asdfsf";
my $path="pub";
my $file="file";
my $ftp = Net::FTP->new($host, Debug => 0)
or die "Could not connect to "$host": $@";
$ftp->login($user, $pw) or die sprintf "Could not login: %s", $ftp->message;
$ftp->cwd($path) or die sprintf "Could not login: %s", $ftp->message;
$ftp->binary;
print $ftp->size($file) or die sprintf "Could not login: %s", $ftp->message;
$ftp->quit();
3 для відповіді № 2
print "FTP size = ", $ftp->size($file), "n";
print "Local size = ", (-s $file), "n";