🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.tcl
3 messages
3 total messages Started by Bodziu Wed, 17 Aug 2005 10:52
Kopiowanie plików
#169
Author: Bodziu
Date: Wed, 17 Aug 2005 10:52
5 lines
1003 bytes
Witam

Czy ktoś wie jak można w tcl pokazać postęp kopiowanego pliku?.

Bodziu 
Re: Kopiowanie plików
#170
Author: Googie
Date: Wed, 17 Aug 2005 19:15
42 lines
2028 bytes
Bodziu wrote:

> Witam
> 
> Czy ktoś wie jak można w tcl pokazać postęp kopiowanego pliku?.
> 

A kopiujesz jak? Przez [file copy]? Wtedy nie bardzo się da.
Żeby pokazać postęp to trzeba posłużyć się nieco bardziej wyrafinowanym
sposobem:

proc progress {in out bytes {errMsg {}}} {
    if {$errMsg != ""} {
        puts "Błąd: $errMsg"
    } else {
        puts "Skopiowano [incr ::Bytes($in) $bytes] bajtow."
        if {[eof $in]} {
            puts "Zakonczono kopiowanie."
            close $in
            close $out
        }
    }
}
set in [open plik1 r]
set Bytes($in) 0
# Poniższa linia opcjonalnie, jeśli plik jest binarny a nie tekstowy
fconfigure $in -translation binary -encoding binary
set out [open plik2 w]
# Poniższa linia analogicznie do linii 2
fconfigure $out -translation binary -encoding binary
fcopy $in $out -command [list progress $in $out] -size 4096


Trzeba zwrócić uwagę, że [fcopy] z opcją -command działa w tle, zatem
niezbędna jest pętla zdarzeń - jeśli skrypt jej dotychczas nie używał,
to zaraz po [close $out] należy dodać linię [set ::done 1] a na końcu
skryptu: [vwait done]


-- 
Pozdrawiam (Greetings)!
Googie
Re: Kopiowanie plików
#171
Author: Googie
Date: Wed, 17 Aug 2005 19:16
10 lines
1092 bytes
Googie wrote:

> fcopy $in $out -command [list progress $in $out] -size 4096

A ta wielkość - 4096 - to sobie wybrałem. To są "kawałki", czyli liczba
bajtów, po skopiowaniu której [fcopy] wywoła komendę progress.

-- 
Pozdrawiam (Greetings)!
Googie
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads