Seite 1 von 6

Wie Kopierdauer berechnen und anzeigen

Verfasst: 05.10.2006 19:57
von RSBasic
Hi ihr alle, ich habe eine Frage. Ich möchte so nen Kopierprogramm programmieren und möchte so machen, wenn ich eine Datei (z.B. 10 MB) mit diesem Programm kopiere, dass ich weis, wie lange das noch braucht um. So wie "Geschätze Dauer des Kopiervorgangs". Mein Problem ist, ich weis nicht, wie ich anfangen soll, habt ihr eine Lösung?

Edit by NicTheQuick: auf aussagekräftigen Threadtitel geändert

Verfasst: 05.10.2006 19:58
von KeyKon
Es wäre auf jedenfall Ratsam einen Aussagekräftigen Titel für den Thread zu nehmen, sowas wie: "Kopierdauer anzeigen" oder so ähnlich...

Verfasst: 05.10.2006 20:01
von AND51
Du könntest natürlich CopyFile() benutzen. Problem: Du weißt nicht, wie lange der befehl braucht, man kann auch kein Callback einbauen.

Umweg: Die Datei in einen *Speicherbuffer (mit AllocateMemory()) einlesen und stückchenweise aus diesem Buffer wieder auf die festplatte schreiben. Daraus kannst du schon mal eine Fortschrittsanzeige machen, wie viel % schon kopiert wurden.

Die Geschwindigkeit zu errechnen ist ein bisschen schwieriger. Musst mal gucken.
Wenn dir allerdings die ungefähre Restdauer reicht, schau einfach auf die Fortschrittsanzeige, wie viel Prozent er pro Sekunde kopiert und errechne daraus die Restdauer.

Verfasst: 05.10.2006 20:05
von KeyKon
Eine möglichkeit ist auch, direkt von einer offenen in eine andere offene Datei zu kopieren, das lohnt sich aber nur richtig wenn die Datei von einem Datenträger auf den anderen kopiert wird.
Eine Möglichkeit zur Zeitermittelung wäre zu messen wie viele Byte er pro Sekunde kopiert, das kannst du dann hochrechnen auf den rest der noch zu kopierenden Bytes (die du natürlich vorher ermitteln musst)
Dieses System funktioniert dann aber genau so wenig/schlecht wie das welches Windows benutzt.
Copyfile ist in der regel auch schneller als das "Per Hand kopieren" man hat allerdings, wie schon gesagt, keinen einfluss auf das was während dem kopieren passiert...

Verfasst: 05.10.2006 20:42
von RSBasic
Vielen Dank, ich muss mal gucken welche Variante ich benutzen soll, aber trotzdem vielen Dank :D

Verfasst: 05.10.2006 21:40
von ts-soft
Vielleicht hilft das hier: http://www.purebasic.fr/german/viewtopi ... t=kopieren
Für PB3.3 sind aber kleinere Anpassungen erforderlich!

Verfasst: 05.10.2006 21:46
von RSBasic
@ ts-soft
danke sehr, aber nach sowas habe ich schon gesucht, aber trotzdem danke :allright:

Verfasst: 06.10.2006 14:22
von KeyKon
Du hast die Frage zwar noch nicht in diesem Thread gestellt aber ich Antworte trotzdem hier:
Wenn du die aktuelle übertragungsrate messen willst, musst du einfach während dem kopieren in festen Zeitintervallen guggen, wie viel kopiert wurde, dann kannst du die Übertragungsrate errechnen, und evtl. auch die restlicher kopierdauer...

Verfasst: 06.10.2006 14:25
von RSBasic
@ KeyKon
Vielen Dank ,ich veruschs Mal :allright:

Verfasst: 06.10.2006 14:32
von #NULL
dazu müßte er aber vermutlich die datei in paketen, bzw mit einer eigenen kopier-routine kopieren. jedenfalls geht das nicht mit CopyFile(), oder?
..aber solche routinen (sogar mit progressbar) findet man hier im board, wenn nicht sogar gleich einer eine hier an den thread anstöpselt.