|
|
|
ПрогрессБар при копировании файлов
|
|||
|---|---|---|---|
|
#18+
Требуется определённое количество файлов скопировать в другое место (скажем, сделать резервную копию). Размер каждого файла разный. Подскажите, пожалуйста, что можно сделать, чтобы прогрессБар адекватно отражал процесс копирования? Решение Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 10:57 |
|
||
|
ПрогрессБар при копировании файлов
|
|||
|---|---|---|---|
|
#18+
Скажите, это настолько просто, что никому даже не хочется отвечать? Или всё-таки это невозможно разрешить? А может неясно поставил вопрос? P.S. VFP7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 14:19 |
|
||
|
ПрогрессБар при копировании файлов
|
|||
|---|---|---|---|
|
#18+
Если речь идет о большом количестве файлов: Код: plaintext Если же один большой файл, то все на порядок сложнее. Есть WinAPI функция CopyFileEx() для таких целей, но из фокса ее использовать довольно проблематично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 14:30 |
|
||
|
ПрогрессБар при копировании файлов
|
|||
|---|---|---|---|
|
#18+
Если размер файла есть критерий длительности процесса, то все просто: 1. Расчитывайте полный размер всех переносимых файлов: ADIR(laDim, m.lcFileName) 2. При копировании каждого файла вычисляете % выполнения, как отношение нарастающего размера скопированных файлов к общему размеру всех файлов (см. п.1) С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 14:30 |
|
||
|
ПрогрессБар при копировании файлов
|
|||
|---|---|---|---|
|
#18+
Zdes v Forume ktoto pridlijil vot takoy primer : LOCAL lcFrom as String, lcTo as String, lcMask as String lcMask=INPUTBOX('Введите маску для файлов','Маска файлов','*.*') IF EMPTY(lcMask) RETURN ENDIF lcFrom=GETDIR('C:\','Исходное местоположение','Выбор папки',1) IF EMPTY(lcFrom) RETURN ENDIF lcTo=GETDIR(lcFrom,'Новое местоположение','Выбор папки',65) IF EMPTY(lcFrom) RETURN ENDIF IF lcFrom==lcTo =MESSAGEBOX('Новое местоположение совпадает с исходным.',48) RETURN ENDIF IF !CopyFiles(lcFrom, lcTo, lcMask) =MESSAGEBOX('Копирование файлов было отменено или произошла ошибка.',48) ENDIF *********************************************** FUNCTION CopyFiles LPARAMETERS tcFrom as String,; tcTo as String,; tcMask as String #define FO_COPY 0x0002 #define FOF_NOCONFIRMATION 0x0010 && Don't prompt the user. #define FOF_FILESONLY 0x0080 && on *.*, do only files #define FOF_NOERRORUI 0x0400 && don't put up error UI #define FOF_NOCOPYSECURITYATTRIBS 0x0800 && dont copy NT file Security Attributes LOCAL lcSHFO as String LOCAL lnHeap as Integer LOCAL lcpFrom as String, lcpTo as String LOCAL lnpFrom as Integer, lnpTo as Integer LOCAL lnFlags as Integer LOCAL i as Integer LOCAL llReturn DECLARE INTEGER SHFileOperation IN shell32.dll string @ DECLARE INTEGER GetProcessHeap IN WIN32API DECLARE INTEGER HeapAlloc IN WIN32API; INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes DECLARE INTEGER HeapFree IN WIN32API; INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem DECLARE RtlMoveMemory IN WIN32API; INTEGER nDestBuffer, STRING @pVoidSource, INTEGER nLength lnHeap=GetProcessHeap() lcSHFO=int2bin(_screen.hwnd) lcSHFO=lcSHFO+int2bin(FO_COPY) lcpFrom=ADDBS(tcFrom)+tcMask+CHR(0)+CHR(0) lcpTo=+ALLTRIM(tcTo)+CHR(0)+CHR(0) lnpFrom=HeapAlloc(lnHeap,0,LEN(lcpFrom)) lnpTo=HeapAlloc(lnHeap,0,LEN(lcpTo)) =RtlMoveMemory(lnpFrom,@lcpFrom,len(lcpFrom)) =RtlMoveMemory(lnpTo,@lcpTo,len(lcpTo)) lcSHFO=lcSHFO+int2bin(lnpFrom)+int2bin(lnpTo) lnFlags=FOF_NOCONFIRMATION+FOF_FILESONLY+FOF_NOCOPYSECURITYATTRIBS lcSHFO=lcSHFO+int2bin(lnFlags)+REPLICATE(CHR(0),12) llReturn=IIF(SHFileOperation(@lcSHFO)=0,.T.,.F.) = HeapFree(lnHeap,0,lnpFrom) = HeapFree(lnHeap,0,lnpTo) CLEAR DLLS RETURN llReturn ENDFUNC *********************************************** FUNCTION int2bin LPARAMETERS tnValue as Integer LOCAL lcReturn as String, lnValue as String, i as Integer lcReturn='' FOR i=3 TO 0 step -1 lnValue=INT(tnValue/256^i) lcReturn=chr(lnValue)+lcReturn tnValue=tnValue-lnValue*256^i ENDFOR RETURN lcReturn ENDFUNC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2006, 16:12 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33867182&tid=1591170]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
53ms |
get topic data: |
7ms |
get forum data: |
7ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 340ms |

| 0 / 0 |
