| |
|
|
| Hier ein Beispiel wie man das Kopieren und das Mostra eines Fortschrittbalkens auch ohne Zuhilfenahme des Explorers selbst in die Hand nehmen kann.
XProfan8 mit XPSE: KompilierenMarkierenSeparieren {$cleq}
declare infle$,outfle$ ,c&,fz&,ptr#,has&,bsize&/* TempVars */
cls;rectangle 10,10 - 110,20;usebrush 1,0// WinInit
fz&:=0;c&:=0;has&:=0;bsize&:=1024;
dim ptr#,bsize&
infle$:="c:p00x.zip"~file
outfle$="c:output.zip"~file
case len(findfirst$(infle$)):fz&:=filesize(infle$)
if (fz&)
case (bsize&>fz&):bsize&:=(fz&2)
/* CopyProc */
assign #1,infle$;assign #2,outfle$;openrw #1;openrw #2
while (filepos(#1)<fz&) ;c&:=blockread(#1,ptr#,0,bsize&):case (c&):blockwrite #2,ptr#,0,c&;has&:=has&+c&;putPerc has&,fz&;wend/* { *//* } */
/* eoCopyProc */
endif
end
proc putPerc
parameters is&,must&
rectangle 10,10 - (10+(is&*100/must&)),20
endproc
XProfan8 ohne XPSE: KompilierenMarkierenSeparierenDECLARE INFLE$,OUTFLE$,C&,FZ&,PTR#,HAS&,BSIZE&
CLS
RECTANGLE 10,10 - 110,20
USEBRUSH 1,0
FZ&=0
C&=0
HAS&=0
BSIZE&=1024
DIM PTR#,BSIZE&
INFLE$="c:\p00x.zip"
OUTFLE$="c:\output.zip"
IF LEN(FINDFIRST$(INFLE$))
FZ&=FILESIZE(INFLE$)
ENDIF
IF (FZ&)
IF (BSIZE&>FZ&)
BSIZE&=(FZ&2)
ENDIF
ASSIGN #1,INFLE$
ASSIGN #2,OUTFLE$
OPENRW #1
OPENRW #2
WHILE (FILEPOS(#1)<FZ&)
C&=BLOCKREAD(#1,PTR#,0,BSIZE&)
IF (C&)
BLOCKWRITE #2,PTR#,0,C&
ENDIF
HAS&=HAS&+C&
PUTPERC HAS&,FZ&
WEND
ENDIF
END
PROC PUTPERC
PARAMETERS IS&,MUST&
RECTANGLE 10,10 - (10+(IS&*100/MUST&)),20
ENDPROC
Über BSIZE& kann man indirekt die Kopiergeschwindigkeit einstellen.
Salve, iF |
|
|
| |
|
|