Seite 1 von 4
Datei kopieren
Verfasst: 10.11.2006 20:15
von Gast
Ich habe ein problem mit meinem Programm, und zwar will ich das wenn man nur eine datei kopiert, der frotschritt in der progressbar angezeigt wird.
Aber nich von 0 auf 100 direckt, sondern wirklich der fortschrit.
Bei mir sieht das so aus, aber das ist ja falsch, weiß nur leider nicht die lösung.
Code: Alles auswählen
anzahl = FileSize(name)
If CopyFile(datei,ziel + GetFilePart(datei)) = 0
MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
Else
For k = 0 To anzahl
SetGadgetState(8,k)
Next
MessageRequester("Info","Die Datei wurde erfolgreich kopiert")
SetGadgetState(8,0)
EndIf
Bitte um Hilfe
Verfasst: 10.11.2006 20:22
von ts-soft
Mit Copyfile ist das unmöglich! Frage wurde schon mal gestellt, vielleicht mal suchen.
Ansonsten, File erstellen, und etappenweise mit WritData schreiben,
zwischendurch die Progressbar aktualisieren. Müssen schon extrem grosse
Dateien sein, damit sich das lohnt

Verfasst: 10.11.2006 20:44
von Maikel
Hm schade naja danke aber dann lass ich das mal ^^
Verfasst: 10.11.2006 21:33
von AND51
Tipp: PB 4 bietet den "neuen" Operator
Not den du mal ausprobieren könnest!
Ich an deiner Stelle würde dann aber den IF und den Else-Block vertauschen, dann reicht ein simples "IF CopyFile()"...

Verfasst: 10.11.2006 21:52
von Gast
tut mir leid ich hab zwar PB4, aber ich kann den Operator Not nicht finden, hast du vieleicht ein beispiel oder so ?
Verfasst: 10.11.2006 23:25
von PBZecke
Not findest Du in der Hilfe unter "Variablen, Typen und Operatoren"
Aber das hilft Dir bei Deinem ursprünglichem Problem eh nicht!
Re: Datei kopieren
Verfasst: 11.11.2006 18:51
von STARGÅTE
Hier wird der "echte" Kopierfortschritt einer Datei angezeigt:
Code: Alles auswählen
Byte.b
anzahl = FileSize(name)
If ReadFile(1, datei)
If CreateFile(2, ziel + GetFilePart(datei))
For k = 0 To anzahl
UseFile(1) : Byte = ReadByte()
UseFile(2) : WriteByte(Byte)
SetGadgetState(8,k)
Next
MessageRequester("Info","Die Datei wurde erfolgreich kopiert")
SetGadgetState(8,0)
closefile(2)
Else
MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
EndIf
closefile(1)
Else
MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
EndIf
Verfasst: 11.11.2006 19:08
von ts-soft
Das Prinzip von STARGÅTE seinem Code ist richtig, aber entsetzlich langsam.
Desweiteren sollte nicht Byteweise, sondern der Dateigröße angepaßte
Häppchen genommen werden (wie bereits weiter oben von mir kurz
beschrieben)
Es ist aber sehr zweifelhaft, das sich der User über den echten Fortschritt bei
einzelnen Dateien freut, wenn er weiß, das das eigentliche Kopieren dadurch
ein vielfaches dauert. Lediglich bei vielen Dateien ist sowas sinnvoll.
Notfalls einen gefakten Fortschritt einbauen (z.B. per Timer), so das der
User das Gefühl hat, es passiert noch was. Sowas machen sogar prof.
Programme

Verfasst: 11.11.2006 19:09
von Gast
Ich möchte mich schonmal für den Codeschnipsel bedanken, aber der kann bei mir mit usefile() nichts anfangen.
ja das mit dem gefaketn fortschrit hab ich mir auch schon gedacht, ich denke auch mal das ich das mache
Verfasst: 11.11.2006 19:11
von ts-soft
Maikel hat geschrieben:Ich möchte mich schonmal für den Codeschnipsel bedanken, aber der kann bei mir mit usefile() nichts anfangen.
Code: Alles auswählen
Byte.b
anzahl = FileSize(name)
If ReadFile(1, datei)
If CreateFile(2, ziel + GetFilePart(datei))
For k = 0 To anzahl
Byte = ReadByte(1)
WriteByte(2, Byte)
SetGadgetState(8,k)
Next
MessageRequester("Info","Die Datei wurde erfolgreich kopiert")
SetGadgetState(8,0)
CloseFile(2)
Else
MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
EndIf
CloseFile(1)
Else
MessageRequester("Fehler","Die Datei konnte nicht kopiert werden")
EndIf
Ungetested nach PB4 geändert