* For publishing all the files in cFromFolder using FTP LOCAL cPwd, cFileName, cUid, cServer, cFtpFolder, cFromFolder LOCAL lFailed, i, cError LOCAL lsFileFind lFailed = .f. cError = "" * NOTE: modify next five lines as appropriate cUid = "<<the FTP user id>>" cServer = "<<the FTP url>>" cPwd = "<<the password>>" cFtpFolder = "<<the folder to publish to>>" cFromFolder= "<<the folder that contains the files to be published>>" #DEFINE INTERNET_INVALID_PORT_NUMBER 0 #DEFINE INTERNET_SERVICE_FTP 1 #DEFINE INTERNET_FLAG_PASSIVE 0x08000000 #DEFINE INTERNET_FLAG_ACTIVE 0 #DEFINE INTERNET_OPEN_TYPE_DIRECT 1 #DEFINE FTP_TRANSFER_TYPE_ASCII 1 #DEFINE FTP_TRANSFER_TYPE_BINARY 2 DECLARE INTEGER InternetConnect IN wininet; INTEGER hInternetSession,; STRING sServerName,; INTEGER nServerPort,; STRING sUsername,; STRING sPassword,; INTEGER lService,; INTEGER lFlags,; INTEGER lContext DECLARE INTEGER InternetOpen IN wininet; STRING sAgent, INTEGER lAccessType,; STRING sProxyName, STRING sProxyBypass,; INTEGER lFlags DECLARE INTEGER FtpSetCurrentDirectory IN wininet; INTEGER hConnect,; STRING @lpszDirectory DECLARE INTEGER FtpCreateDirectory IN wininet; INTEGER hConnect,; STRING lpszDirectory DECLARE INTEGER FtpDeleteFile ; IN WinInet.dll ; INTEGER hFTPSession,; STRING cFileName DECLARE INTEGER FtpFindFirstFile ; IN WININET.DLL ; INTEGER hFTPSession,; STRING cFileSpec,; STRING @sFileFind,; INTEGER nFlags,; INTEGER nContext DECLARE INTEGER InternetFindNextFile ; IN WinInet.DLL ; INTEGER hFindHandle,; STRING @lsFileFind DECLARE INTEGER FtpPutFile IN wininet; INTEGER hConnect,; STRING lpszLocalFile,; STRING lpszNewRemoteFile,; INTEGER dwFlags,; INTEGER dwContext DECLARE INTEGER InternetOpenUrl IN wininet; INTEGER hInternet,; STRING lpszUrl,; STRING lpszHeaders,; INTEGER dwHeadersLength,; INTEGER dwFlags,; INTEGER dwContext DECLARE INTEGER InternetCloseHandle IN wininet INTEGER hInet WAIT " Publishing... " WINDOW AT SROWS()/2-1, (SCOLS()/2)-50 NOWAIT hInternet = InternetOpen("FoxFtp", INTERNET_OPEN_TYPE_DIRECT, CHR(0), CHR(0), 0) IF ISNULL(hInternet) && this may never happen. Seems to always work, even with no physical connection lFailed = .t. cError = "access the internet" ELSE hConnection = InternetConnect(m.hInternet, cServer, ; INTERNET_INVALID_PORT_NUMBER, ; cUid, cPwd, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0) IF hConnection = 0 lFailed = .t. cError = "connect" ELSE FtpSetCurrentDirectory(m.hConnection, @cFtpFolder) ADIR(aFiles,cFromFolder+"\*.*","",1) FOR m.i = 1 TO ALEN(aFiles,1) WAIT " Publishing "+STR(m.i,3,0)+" of "+STR(ALEN(aFiles,1),3,0) WINDOW AT SROWS()/2-1, (SCOLS()/2)-50 NOWAIT IF FtpPutFile(m.hConnection, cFromFolder+"\" + aFiles(m.i,1), ; aFiles(m.i,1), ; FTP_TRANSFER_TYPE_BINARY, 0) = 0 lFailed = .t. cError = "Publish "+ aFiles(m.i,1) EXIT ENDIF ENDFOR ENDIF ENDIF IF VARTYPE(hInternet)="N" InternetCloseHandle(m.hInternet) ENDIF #UNDEFINE INTERNET_INVALID_PORT_NUMBER 0 #UNDEFINE INTERNET_SERVICE_FTP 1 #UNDEFINE INTERNET_FLAG_PASSIVE 0x08000000 #UNDEFINE INTERNET_FLAG_ACTIVE 0 #UNDEFINE INTERNET_OPEN_TYPE_DIRECT 1 #UNDEFINE FTP_TRANSFER_TYPE_ASCII 1 #UNDEFINE FTP_TRANSFER_TYPE_BINARY 2 WAIT CLEAR IF lFailed MESSAGEBOX("The server did not respond. Please try again in a few minutes.",16,"Unable to " + cError + ".") RETURN .f. ELSE RETURN .t. ENDIF