Ho uno script FTP Perl e voglio esserne sicurose il trasferimento di file è completo controllando il numero di byte che vengono trasferiti sul server remoto è uguale ai byte effettivi del file nel server locale. Come potrei farlo?
Ecco cosa ho finora:
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;
risposte:
6 per risposta № 1dai documenti, puoi usare size ()
dimensione (FILE) Restituisce la dimensione in byte perfile fornito come archiviato sul server remoto. NOTA: la dimensione indicata è la dimensione del file memorizzato sul telecomando server. Se il file viene successivamente trasferito dal server in ASCII modalità e il server remoto e la macchina locale hanno idee diverse su "Fine linea" quindi la dimensione del file sul computer locale dopo il trasferimento potrebbe essere diverso.
Codice:
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 per risposta № 2
print "FTP size = ", $ftp->size($file), "n";
print "Local size = ", (-s $file), "n";