User since
2003-08-04
5873
Artikel
ModeratorIn
Du könntest zum Beispiel mit Tk::repeat alle x Millisekunden nachsehen, wie groß die Datei inzwischen ist und Deinen Fortschrittsbalken ändern. (Ev. einfach dadurch, dass Du eine Variable an das Skalenelement bindest, in der Du die Größe ablegst (oder die Größe geteilt durch Zielgröße, Skalenelement dann auf 1 skaliert...)
Ich verschieb den Thread mal ...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-11-26
23
Artikel
BenutzerIn
Hallo, hallo,
ich habe ein Perl-TK Programm mit dem ich verschiedenste Dateien kopiere.
Jetzt möchte ich eine Progressbar einbauen, dien mir bei jeder einzelnen Datei den kopiervorgang anzeigt.
Wie kann ich während des Kopiervorgangs (mit File::Copy)ständig die Dateigröße der Zieldatei abfragen, um sie Anzeigen zu können??
Danke,
JanE
User since
2003-11-26
23
Artikel
BenutzerIn
Hi Crian,
Danke erstmal, werde es heute Abend mal ausprobieren und morgen kurz bescheid geben, ob es funktioniert hat.
Ciao,
JanE
User since
2003-11-26
23
Artikel
BenutzerIn
Hallo, hallo,
ich habe diese Möglichkeit probiert, doch leider passiert in der Zeit, in der der Kopiervorgang läuft gar nichts mit der Anzeige.
Um Fehler bei der Anzeige zu vermeiden, habe ich alle 500 ms ein Wort ausgeben lassen. Dieses Wort kommt vor und nach dem Kopiervorgang alle 500 ms (soweit ich diese Zeit abschätzen kann), doch während des Vorgangs wird kein Wort ausgegeben.
Es werden auch nicht mehrere gleichzeitig ausgegeben, wie es zu Beispiel der Fall währe, wenn nur die Anzeige nicht aktualisiert wird.
User since
2003-08-04
2036
Artikel
BenutzerIn
Poste doch mal deinen Code...
Gruss
User since
2003-11-26
23
Artikel
BenutzerIn
Muß ich mir erst die richtigen Zeilen zusammensuchen, wird etwas dauern....
Gruß
JanE
User since
2003-11-26
23
Artikel
BenutzerIn
Hier ein Test-Code.
Je größer die Datei ist, umso besser wird der Effekt sichtbar.
Die kopierte Datei muß für weitere Tests gelöscht werden(sonst nicht mehr sichtbar), die Ausgabe sieht man in dazugehörigen Fenster.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use strict;
use Tk;
use File::Copy;
sub KopierTest;
sub Ausgabe;
my $Zahl = 0;
my $QuellFile = "C:\\test.txt";
my $ZielFile = "C:\\test1.txt";
my $MainWindow = MainWindow->new;
$MainWindow->title("test");
my $StartButton = $MainWindow->Button (
-text => "starte den Test",
-command => sub {
KopierTest;
}
)
->pack (
-fill=>'both',
-padx=>10,
-pady=>10,
);
$MainWindow->repeat(100, \&Ausgabe);
MainLoop;
sub KopierTest {
copy ($QuellFile, $ZielFile);
}
sub Ausgabe {
print "Hallo, ich bin der TEST Nummer $Zahl\n";
$Zahl++;
}
Gruß,
JanE
Edit @havi: Code-Tags eingefuegt\n\n
<!--EDIT|havi|1075795202-->
User since
2003-08-04
5873
Artikel
ModeratorIn
Na klar, Du startest ja auch KopierTest vor der MainLoop :-)
starte es nach der MainLoop (über Tk::After mit 500 ms oder so)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-04
5873
Artikel
ModeratorIn
Statt
-command => sub {
KopierTest;
}
kannst Du übrigens
schreiben, aber das nur btw.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-11-28
3645
Artikel
ModeratorIn
[quote=Crian,03.Feb..2004, 10:31]Na klar, Du startest ja auch KopierTest vor der MainLoop :-)
[/quote]
Nein, KopierTest wird schon richtig gestartet. Leider blockiert copy(), so dass kein Update waehrend des Kopiervorgangs stattfindet. Die Antwort darauf lautet ueblicherweise: fork, threads, background system, fileevent, POE, Tk::ExecuteCommand etc....\n\n
<!--EDIT|ptk|1075805634-->