powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ПрогрессБар при копировании файлов
6 сообщений из 6, страница 1 из 1
ПрогрессБар при копировании файлов
    #33866159
startFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Требуется определённое количество файлов скопировать в другое место (скажем, сделать резервную копию). Размер каждого файла разный.

Подскажите, пожалуйста, что можно сделать, чтобы прогрессБар адекватно отражал процесс копирования?

Решение
Код: plaintext
ПрогрессБар.MAX = количество_файлов
не интересует
...
Рейтинг: 0 / 0
ПрогрессБар при копировании файлов
    #33867182
startFOX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, это настолько просто, что никому даже не хочется отвечать?

Или всё-таки это невозможно разрешить?

А может неясно поставил вопрос?

P.S. VFP7
...
Рейтинг: 0 / 0
ПрогрессБар при копировании файлов
    #33867231
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет о большом количестве файлов:
Код: plaintext
ПрогрессБар.MAX = общий_размер_файлов
ADIR() возвращает в т.ч. и размер файла. Предварительно посчитай общий размер и показывай размер скопированных.

Если же один большой файл, то все на порядок сложнее. Есть WinAPI функция CopyFileEx() для таких целей, но из фокса ее использовать довольно проблематично.
...
Рейтинг: 0 / 0
ПрогрессБар при копировании файлов
    #33867233
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если размер файла есть критерий длительности процесса, то все просто:
1. Расчитывайте полный размер всех переносимых файлов:
ADIR(laDim, m.lcFileName)
2. При копировании каждого файла вычисляете % выполнения, как отношение нарастающего размера скопированных файлов к общему размеру всех файлов (см. п.1)

С уважением, Алексей
...
Рейтинг: 0 / 0
ПрогрессБар при копировании файлов
    #33867609
FoxFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
ПрогрессБар при копировании файлов
    #33867651
Вот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот здесь описано как стандартный виндовский прогресс вызвать, в конце статьи
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ПрогрессБар при копировании файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]