Verfasst: 11.11.2006 22:19
> da zeigt er mir syntax error an.
na, ein bisschen mitarbeiten musst Du schon
Grüße ... Kiffi
na, ein bisschen mitarbeiten musst Du schon

Grüße ... Kiffi
Da fehlt ein Komma, habs oben korrigiert, aber solche kleinen Fehler solltestMaikel hat geschrieben:Protected FileSource.l, FileDest.l, Mem.l, Size.q Bloecke.q, Rest.q, i.l, Prozent.f
da zeigt er mir syntax error an.
Code: Alles auswählen
Procedure CopyFileEx(Source.s, Dest.s, Progressbar.l = #PB_Any, BlockSize.l = 4096)
Protected FileSource.l, FileDest.l, Mem.l, Size.q, Bloecke.q, Rest.q, i.l, Prozent.f
If BlockSize <= 0 : BlockSize = 1 : EndIf
FileSource = ReadFile(#PB_Any, Source)
FileDest = CreateFile(#PB_Any, Dest)
Mem = AllocateMemory(BlockSize)
If FileSource And FileDest And Mem
FileBuffersSize(FileSource, BlockSize)
FileBuffersSize(FileDest, BlockSize)
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 > #PB_Any And IsGadget(Progressbar)
SetGadgetState(Progressbar, Prozent)
EndIf
Next
If Rest
ReadData(FileSource, Mem, Rest)
WriteData(FileDest, Mem, Rest)
EndIf
If Progressbar > #PB_Any And IsGadget(Progressbar)
SetGadgetState(Progressbar, 100)
EndIf
FreeMemory(Mem)
CloseFile(FileSource)
CloseFile(FileDest)
If FileSize(Dest) > 0
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
If Not OpenWindow(0, #PB_Ignore, 0, 300, 95, "CopyFileEx") : End : EndIf
If Not CreateGadgetList(WindowID(0)) : End : EndIf
ProgressBarGadget(0, 10, 10, 280, 40, 0, 100, #PB_ProgressBar_Smooth)
ButtonGadget(1, 120, 60, 60, 25, "Start")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
If EventGadget() = 1
DisableGadget(1, #True)
CopyFileEx(#PB_Compiler_Home + "PureBasic.chm", GetTemporaryDirectory() + "PureBasic.chm", 0, 20)
DisableGadget(1, #False)
EndIf
EndSelect
ForEver
So ähnlich mache ich es auch immer.ts-soft hat geschrieben:Habs nochmal Fehlerbereinigt und Beispiel hinzugefügt. Blockgröße kann jetzt
bestimmt werden, wobei 4096 meist optimal ist, aber man dann bei kleinen
Dateien nicht viel sieht![]()
Code: Alles auswählen
blocks.l=x/8192 : rest=x-(blocks*8192)
Code: Alles auswählen
If Bloecke>0
Code: Alles auswählen
If Rest>0
Was genau in dieser Fore auch wichtig ist. Demnach also gut gemacht.ts-soft hat geschrieben:Habs mich aber bemüht es Anfängerfreundlich zu schreiben
Ja. 4096 = Exakt 4KB und 8192 = 8 KB.Maikel hat geschrieben:Wenn ich mal fragen darf (damit ich die rechnung verstehe) wie kommt ihr auf die festgelegten zahlen 8192 und 4096 ?
sind das die bytes ?