Datei kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Gast

Beitrag von Gast »

wie soll ich das denn faken weil ich weiß ja nicht wie lange der braucht um einen byte zu kopieren ?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das einfachste ist irgend ne animation, die sich dreht.

bissel anspruchsvoller ist ne berechnung über dateigröße und aktuelle durchsatzrate,
so ist das bei den win-internen zeitangaben oft gemacht.

wofür soll es denn eigentlich sein, willst du wirklich gigantische datenmengen verschieben?

ich mein, meistens geht der wirklich dateizugriff wesentlich schneller, als man braucht,
um überhaupt ne grafik aufn screen zu bringen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Gast

Beitrag von Gast »

ja für filme und spiele und auch normale dateien soll das sein, aber das mit der animation ist gut das nehmen ich, thx :)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

der vorteil ist halt, dass du ne einfache zyklische anim laufen lassen kannst,
und es völlig egal ist, wie lange es insgesamt dauert,
und außerdem du den kopiervorgang nicht stören oder beschränken musst.

wenn du so eine schrittweise lösung wählst wie schon vorgeschlagen,
auch wenn du in 4KB-stücken kopierst statt einzelne bytes,
du würdest trotzdem wesentlich länger brauchen als mit dem eingebauten copy-befehl.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hier mal eine alternative Lösung. Hab gerade langeweile gehabt :mrgreen:

Code: Alles auswählen

#BlockSize = 4096

Procedure CopyFileEx(Source.s, Dest.s, Progressbar.l = 0)
  Protected FileSource.l, FileDest.l, Mem.l, Size.q, Bloecke.q, Rest.q, i.l, Prozent.f
 
  FileSource = ReadFile(#PB_Any, Source)
  FileDest = CreateFile(#PB_Any, Dest)
  Mem = AllocateMemory(#BlockSize)
 
  If FileSource And FileDest And Mem
    Size = Lof(FileSource)
    Bloecke = Size / #BlockSize
    Rest = Size % #BlockSize
   
    For i = 1 To Bloecke
      ReadData(FileSource, Mem, #BlockSize)
      WriteData(FileDest, Mem, #BlockSize)
     
      Prozent = ((#BlockSize * i) / Size) * 100
      If Progressbar
        SetGadgetState(Progressbar, Prozent)
      EndIf
     Next
   
    ReadData(FileSource, Mem, Rest)
    WriteData(FileDest, Mem, Rest)
    If Progressbar
      SetGadgetState(Progressbar, 100)
    EndIf
   
    FreeMemory(Mem)
    CloseFile(FileSource)
    CloseFile(FileDest)
  EndIf
EndProcedure
Nicht mit Progressbar getestet!

kleinen Fehler korrigiert.
Zuletzt geändert von ts-soft am 11.11.2006 22:18, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Gast

Beitrag von Gast »

wie kann denn meine gif animation da rein bringen ?
wenn ich es mit playmove mache dann offnet der ein extra fenster das ist ja nicht der sinn der sache
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> wie kann denn meine gif animation da rein bringen ?

die brauchst Du nicht mehr, wenn Du den Code von ts-soft nutzt.

Grüße ... Kiffi
a²+b²=mc²
Maikel

Beitrag von Maikel »

hm das stimmt,

aber ich würd das trozdem mal gerne wissen
Gast

Beitrag von Gast »

Protected FileSource.l, FileDest.l, Mem.l, Size.q Bloecke.q, Rest.q, i.l, Prozent.f


da zeigt er mir syntax error an.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

mit gif-animation garnicht.

im grunde mit zeichnen auf ein image das du dementsprechend regelmäßig aktualisierst.

das was ts vorgeschlagen hat, ist eine alternative,
aber auch nur, wenn es dir noch schnell genug ist.

PS:
Maikel hat geschrieben:...da zeigt er mir syntax error an.
ja, da fehlt ein komma, schau mal genau hin.. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten