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:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
|
Вариант точный
'egl1044
Приватное Const BUF_SIZE = буфер невыполнения обязательства 4096 '4KB для FTP
Приватное Const INVALID_HANDLE_VALUE = (- 1)
Приватное Const OPEN_EXISTING = &H3&
Приватное Const GENERIC_READ = &H80000000
Приватное Const GENERIC_WRITE = &H40000000
Приватное Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Приватное Const INTERNET_SERVICE_FTP = 1
Приватное Const INTERNET_DEFAULT_FTP_PORT = 21
Приватное Const FTP_TRANSFER_TYPE_UNKNOWN = 0
Приватно объявите свободу «kernel32» CreateFileW функции (lpFileName ByVal как dwDesiredAccess длиной, ByVal как dwShareMode длиной, ByVal как lpSecurityAttributes длиной, ByVal как dwCreationDisposition длиной, ByVal как dwFlagsAndAttributes как длиной, ByVal длиной, ByVal hTemplateFile как длиной) как длиной
Приватно объявите свободу «kernel32» ReadFile функции (ByVal hFile как длиной, lpBuffer ByVal как длиной, nNumberOfBytesToRead ByVal как длиной, lpNumberOfBytesRead ByRef как длиной, ByVal lpOverlapped как длиной) как длиной
Приватно объявите свободу «kernel32» CloseHandle функции (hObject ByVal как длиной) как длиной
Приватно объявите свободу «wininet» InternetOpenW функции (ByVal lpszAgent как dwAccessType длиной, ByVal как lpszProxyName длиной, ByVal как lpszProxyBypass длиной, ByVal как dwFlags длиной, ByVal как длиной) как длиной
Приватно объявите свободу «wininet» InternetConnectW функции (hInternetSession ByVal как sServerName длиной, ByVal как nServerPort длиной, ByVal как sUsername длиной, ByVal как sPassword длиной, ByVal как lService длиной, ByVal как lFlags длиной, ByVal как lcontext длиной, ByVal как длиной) как длиной
Приватно объявите свободу «wininet» InternetWriteFile функции (ByVal hFile как длиной, lpBuffer ByVal как длиной, dwNumberOfBytesToWrite ByVal как длиной, ByRef lpdwNumberOfBytesWritten как длиной) как длиной
Приватно объявите свободу «wininet» InternetCloseHandle функции (hInternet ByVal как длиной) как длиной
Приватно объявите свободу «wininet» FtpOpenFileW функции (hConnect ByVal как lpszFileName длиной, ByVal как dwAccess длиной, ByVal как dwFlags длиной, ByVal как dwContext длиной, ByVal как длиной) как длиной
Приватно объявите свободу «kernel32» GetFileSize функции (ByVal hFile как lpFileSizeHigh длиной, ByRef как длиной) как длиной
Затемните буфер (BUF_SIZE) как байт
Затемните dwReadBytes как длиной
Затемните dwWrittenBytes как длиной
Тускло hOpen как длиной
Затемните hConnect как длиной
Затемните hInternet как длиной
Затемните hFile как длиной
Общественное Sub FtpPutFileEx (_
szServer ByVal как шнур, _
szUser ByVal как шнур, _
szPassword ByVal как шнур, _
ByVal szLocalFile как шнур, _
ByVal szServerFile как шнур)
Тусклое dwStatus как длиной
Тускло dwLoFileSize как длиной
Тускло dwHiFileSize как длиной
Затемните dwPercent как длиной
'/init
hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
'/соединитесь к серверу ftp
hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0)
Если hConnect = 0 после этого
Ыборка
Debug.Print «InternetConnectW ()» & Err.LastDllError
Выходите подводная лодка
Закончитесь если
'/получите ручку для filename будет написан к серверу ftp
hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
Если hInternet = 0 после этого
Ыборка
Debug.Print «FtpOpenFile ()» & Err.LastDllError
Выходите подводная лодка
Закончитесь если
'/получите, что ручку для местного архива прочитать байты
hFile = CreateFileW (StrPtr («\ \? \» & szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
Если hFile = INVALID_HANDLE_VALUE после этого
Ыборка
Debug.Print «CreateFileW ()» & Err.LastDllError
Выходите подводная лодка
Закончитесь если
'// получает местный размер архива для прогресса. Поддержки этого примера
' только до 2GB прогресса отчетность состояния.
dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
'/прочитайте местный архив, напишите байты архива сервера
Сделайте
Если ReadFile, то (hFile, VarPtr (буфер (0)), BUF_SIZE, dwReadBytes, 0) после этого
Если InternetWriteFile, то (hInternet, VarPtr (буфер (0)), dwReadBytes, dwWrittenBytes) после этого
'Отслеживайте количество написанных байт и процента.
dwStatus = (dwStatus + dwWrittenBytes)
dwPercent = (dwStatus/dwLoFileSize) * 100
'Label1.Caption = dwPercent
Закончитесь если
Еще
Выход делает
Закончитесь если
DoEvents
Не закрепить петлеть до dwReadBytes = 0
«Сделанные» Debug.Print
'/ыборка
Ыборка
Буфер Erase
Подводная лодка конца
Приватная Sub ыборка ()
Если hOpen <> 0 после этого
InternetCloseHandle hOpen
hOpen = 0
Закончитесь если
Если hConnect <> 0 после этого
hConnect InternetCloseHandle
hConnect = 0
Закончитесь если
Если hInternet <> 0 после этого
hInternet InternetCloseHandle
hInternet = 0
Закончитесь если
Если hFile > 0 после этого
CloseHandle hFile
hFile = INVALID_HANDLE_VALUE
Закончитесь если
Закончите подводную лодку
|