2011-10-13 3 views
1

Comment afficher le pourcentage du téléchargement géré par ::ftp::Put dans Tcl?Tcl - Surveiller le pourcentage de téléchargement FTP

Exemple:

proc upload {host user pass dir fileList} { 
     set handle [::ftp::Open $host $user $pass] 

    ftpGoToDir $handle $dir 
     # some counters for our feedback string 
     set j 1 
     set k [llength $fileList] 

     foreach i $fileList { 
     upload:status "uploading ($j/$k) $i" 
     ::ftp::Put $handle $i 
     incr j 
} 

Merci :)

Répondre

2

Voici un moyen (non testé):

proc upload {host user pass dir fileList} { 
    set handle [::ftp::Open $host $user $pass] 

    ftpGoToDir $handle $dir 
    # some counters for our feedback string 
    set j 1 
    set k [llength $fileList] 

    foreach i $fileList { 
     upload:status "uploading ($j/$k) $i" 
     upload:execute $handle $i 
     incr j 
    } 
} 

proc upload:execute {handle filename {chunksize 8196}} { 
    set filesize [file size $filename] 
    set sent 0 
    set fid [open $filename r] 

    Put_or_Append Put $handle $fid $chunksize $filename $filesize sent 
    while {![eof $fid]} { 
     Put_or_Append Append $handle $fid $chunksize $filename $filesize sent 
    } 
    close $fid 
} 

proc Put_or_Append {cmd handle fid chunksize filename filesize sentvar} { 
    set chunk [read $fid $chunksize] 
    ::ftp::$cmd $handle -data $chunk $filename 
    upvar 1 $sentvar sent 
    incr sent [string length $chunk] 
    puts [format "sent %d bytes (%d%%)" $sent [expr {100*$sent/$filesize}]] 
} 
+0

Il me donne cette erreur: 'mal # args: devrait être « nom proc args body "en cours d'exécution" proc upload: execute handle nom de fichier {chunksize 8196} "'. Désolé, je suis nouveau à Tcl :) – yoda

+0

J'ai raté l'accolade d'ouverture pour le corps proc. Fixé. J'ai dit non testé;) –

+0

Merci. Il a toujours un problème avec la méthode ftp close, ne sait pas ce qui se passe, ne voit pas de pointeur ftp fermé dans votre script. – yoda

Questions connexes