powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прогресс копирования файла
4 сообщений из 4, страница 1 из 1
Прогресс копирования файла
    #32470379
WildBoar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо скопировать файл фоксом. COPY FILE типа. Файл большой. Копирование может несколько минут занять. Можно как-нибудь нарисовать в фоксе прогрессбар процесса копирования?
...
Рейтинг: 0 / 0
Прогресс копирования файла
    #32470442
ILA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ILA
Гость
Можно. Копируй файл не командой COPY FILE, а собственной процедурой, используя команды FOPEN(), FREAD(), FWRITE(), FCLOSE().
В цикле читай из файла по сколько-нито байт и пиши их в другой. После этого перерисовывай прогресс бар.
Всё.
...
Рейтинг: 0 / 0
Прогресс копирования файла
    #32470596
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно через API copyfileex и callback. Пример на www.universalthread.com
...
Рейтинг: 0 / 0
Прогресс копирования файла
    #32470608
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример вызова стандартного окошка копирования файлов Windows (функция SHFileOperation из shell32.dll). В принципе можно не только копировать, но и перемещать и удалять. Подробности в MSDN.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
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
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прогресс копирования файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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