Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прогресс копирования файла / 4 сообщений из 4, страница 1 из 1
06.04.2004, 12:25
    #32470379
WildBoar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прогресс копирования файла
Надо скопировать файл фоксом. COPY FILE типа. Файл большой. Копирование может несколько минут занять. Можно как-нибудь нарисовать в фоксе прогрессбар процесса копирования?
...
Рейтинг: 0 / 0
06.04.2004, 12:58
    #32470442
ILA
ILA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прогресс копирования файла
Можно. Копируй файл не командой COPY FILE, а собственной процедурой, используя команды FOPEN(), FREAD(), FWRITE(), FCLOSE().
В цикле читай из файла по сколько-нито байт и пиши их в другой. После этого перерисовывай прогресс бар.
Всё.
...
Рейтинг: 0 / 0
06.04.2004, 14:22
    #32470596
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прогресс копирования файла
можно через API copyfileex и callback. Пример на www.universalthread.com
...
Рейтинг: 0 / 0
06.04.2004, 14:26
    #32470608
NNN
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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Прогресс копирования файла / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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