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