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:
|
Explicit alternativ
'egl1044
Privata Const BUF_SIZE = standard 4096 '4KB fungera som buffert för FTP
Privata Const INVALID_HANDLE_VALUE = (- 1)
Privata Const OPEN_EXISTING = &H3&
Privata Const GENERIC_READ = &H80000000
Privata Const GENERIC_WRITE = &H40000000
Privata Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Privata Const INTERNET_SERVICE_FTP = 1
Privata Const INTERNET_DEFAULT_FTP_PORT = 21
Privata Const FTP_TRANSFER_TYPE_UNKNOWN = 0
Privat förklara fungerar den CreateFileW liben ”kernel32” (ByVal lpFileName som Long, ByVal dwDesiredAccess som Long, ByVal dwShareMode som Long, ByVal lpSecurityAttributes som Long, ByVal dwCreationDisposition som Long, ByVal dwFlagsAndAttributes som Long, ByVal som är hTemplateFile som Long) som Long
Privat förklara fungerar den ReadFile liben ”kernel32” (ByVal som var hFile som Long, ByVal lpBuffer som Long, ByVal nNumberOfBytesToRead som Long, ByRef lpNumberOfBytesRead som Long, ByVal lpOverlapped som Long), som Long
Privat förklara fungerar den CloseHandle liben ”kernel32” (ByVal hObject som Long) som Long
Privat förklara fungerar den InternetOpenW liben ”wininet” (ByVal som är lpszAgent som Long, ByVal dwAccessType som Long, ByVal lpszProxyName som Long, ByVal lpszProxyBypass som Long, ByVal dwFlags som Long) som Long
Privat förklara fungerar den InternetConnectW liben ”wininet” (den ByVal hInternetSessionen som Long, ByVal sServerName som Long, ByVal nServerPort som Long, ByVal sUsername som Long, ByVal sPassword som Long, ByVal lService som Long, ByVal lFlags som Long, ByVal lcontext som Long) som Long
Privat förklara fungerar den InternetWriteFile liben ”wininet” (ByVal som är hFile som Long, ByVal lpBuffer som Long, ByVal dwNumberOfBytesToWrite som Long, ByRef lpdwNumberOfBytesWritten som Long), som Long
Privat förklara fungerar den InternetCloseHandle liben ”wininet” (ByVal hInternet som Long) som Long
Privat förklara fungerar den FtpOpenFileW liben ”wininet” (ByVal hConnect som Long, ByVal lpszFileName som Long, ByVal dwAccess som Long, ByVal dwFlags som Long, ByVal dwContext som Long) som Long
Privat förklara fungerar den GetFileSize liben ”kernel32” (ByVal som är hFile som Long, ByRef lpFileSizeHigh som Long) som Long
Dunkelt fungera som buffert (BUF_SIZE) som byte
Dunkla dwReadBytes som Long
Dunkla dwWrittenBytes som Long
Dunkelt hOpen som Long
Dunkel hConnect som Long
Dunkel hInternet som Long
Dunkelt hFile som Long
Offentliga underFtpPutFileEx (_,
ByVal szServer som stränger, _,
ByVal szUser som stränger, _,
ByVal szPassword som stränger, _,
szLocalFile ByVal som stränger, _,
szServerFile ByVal som stränger)
Dunkel dwStatus som Long
Dunkelt dwLoFileSize som Long
Dunkelt dwHiFileSize som Long
Dunkelt dwPercent som Long
'/init
hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
'/förbind till en ftp-server
hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassworden), INTERNET_SERVICE_FTP, 0, 0),
Om hConnect = 0 därefter
Rengöring
Debug.Print ”InternetConnectW ()” & Err.LastDllError
Gå ut suben
Avsluta om
'/få handtaget för filenamen som ska är skriftlig till en ftp-server
hInternet = FtpOpenFileW (hConnect, (szServerFile) StrPtr, GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
Om hInternet = 0 därefter
Rengöring
Debug.Print ”FtpOpenFile ()” & Err.LastDllError
Gå ut suben
Avsluta om
'/få handtaget för lokal sparar för att läsa byte
hFile = CreateFileW (StrPtr (”\ \? \” & szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
Om hFile = INVALID_HANDLE_VALUE därefter
Rengöring
Debug.Print ”CreateFileW ()” & Err.LastDllError
Gå ut suben
Avsluta om
'// får lokal sparar storleksanpassar för framsteg. Service för detta exempel
' endast upp till 2GB av status som anmäler framsteg.
dwLoFileSize = hFile GetFileSize (, dwHiFileSize),
'/läs lokalen sparar, skriver serveren sparar byte
Gör
Om hFile ReadFile (, VarPtr (fungera som buffert (0)), BUF_SIZE, dwReadBytes, 0) därefter
Om InternetWriteFile (hInternet, VarPtr (fungera som buffert (0)), dwReadBytes, dwWrittenBytes) därefter
'Spåra beloppet av skriftliga byte och procentsats.
dwStatus = (dwStatusen + dwWrittenBytes)
dwPercent = (dwStatusen/dwLoFileSize) * 100
'Label1.Caption = dwPercent
Avsluta om
Annars
Gå ut gör
Avsluta om
DoEvents
Kretsa till dwReadBytes = 0
”Gjorda” Debug.Print,
'/rengöring
Rengöring
Raderingen fungera som buffert
Avsluta suben
Privat underrengöring ()
Om hOpen <> 0 därefter
InternetCloseHandle hOpen
hOpen = 0
Avsluta om
Om hConnect <> 0 därefter
InternetCloseHandle hConnect
hConnect = 0
Avsluta om
Om hInternet <> 0 därefter
InternetCloseHandle hInternet
hInternet = 0
Avsluta om
Om hFile > 0 därefter
hFile CloseHandle
hFile = INVALID_HANDLE_VALUE
Avsluta om
Avsluta suben
|