Class: | FTP_SERVICE |
Type | Character/Array |
By reference | |
Direction | Input |
Column | Description | Type |
laArray(x,1) | File Attributes | String |
laArray(x,2) | Links count | Number |
laArray(x,3) | Owner | String |
laArray(x,4) | Group | String |
laArray(x,5) | File Size | Number |
laArray(x,6) | File Last Write Time | DateTime |
laArray(x,7) | File Name | String |
Type | Character |
Direction | Input |
Type | Boolean |
Direction | Input |
Optional |
Value | Description |
_FTPS_RWF_File | luData is file name. |
_FTPS_RWF_String | luData is string. |
_FTPS_RWF_Array | luData is array. |
Type | Numeric |
Direction | Input |
Optional |
Value | Description |
FTP_TRANSFER_TYPE_ASCII | Transfers the file as ASCII. |
FTP_TRANSFER_TYPE_BINARY | Transfers the file as binary. |
LOCAL loFTP LOCAL ARRAY laFiles(1),laFile(1) #INCLUDE "ftp.h" SET PROCEDURE TO ftp.prg ADDITIVE loFTP=CREATEOBJECT('_myftp') IF loFTP.OpenInternet("anonymous", "gorila@gorila.cz","192.168.2.21", "21") * Get "Name list" and save it as file =loFTP.List("c:\nlstx.txt","",_FTPS_RWF_File,0) MODI FILE "c:\nlst.txt" NOWAIT * Get "Name list" and return it as string =loFTP.List(@lcPom,"",_FTPS_RWF_String,0) ?lcPom * Get "Name list" and save it to array ?loFTP.List(@laFiles,"download",_FTPS_RWF_Array,0) * For each file get other informations FOR lii=1 to ALEN(laFiles) ? ?laFiles[lii, 1] ?laFiles[lii, 2] ?laFiles[lii, 3] ?laFiles[lii, 4] ?laFiles[lii, 5] ?laFiles[lii, 6] ?laFiles[lii, 7] NEXT =loFTP.CloseInternet() ENDIF RELEASE PROCEDURE ftp.prg DEFINE CLASS _myFTP AS FTP_SERVICE PROCEDURE BeforeList(luData,lcMask,liFlags,lnFlag) ?PROGRAM(16) ?CHR(9),luData,lcMask,liFlags,lnFlag ENDPROC PROCEDURE AfterList(luData,lcMask,liFlags,lnFlag,liResult) ?PROGRAM(16) ?CHR(9),luData,lcMask,liFlags,lnFlag,liResult ENDPROC PROCEDURE AtList(luData,lcMask,liFlags,lnFlag,lcBuffer,liResult) ?PROGRAM(16) ?CHR(9),luData,lcMask,liFlags,lnFlag,lcBuffer,liResult ENDPROC ENDDEFINE
LPARAMETERS OUTREF luData, INP lcMask,OPT_INP liFlags,OPT_INP lnFlag EXTERNAL ARRAY luData LOCAL liResult, lihFTP,lii,lcBuffer,lcData,liData,liEnd,liCount,llRet liFlags=IIF(PCOUNT()<3,_FTPS_RWF_File,liFlags) lnFlag=IIF(PCOUNT()<4,FTP_TRANSFER_TYPE_ASCII,lnFlag) IF This.OpenFTPConnection(This.cCurrentDir) && Open an FTP Handle IF BITTEST(liFlags,2) && Array? DIMENSION luData [1, 1] luData [1, 1] = .NULL. ENDIF lihFTP=0 This.BeforeList(@luData,@lcMask,liFlags,lnFlag) liResult=IIF(This._FTPCommand("LIST "+lcMask,FTP_TRANSFER_TYPE_ASCII,0,@lihFTP),1,0) IF liResult #0 && OK, FTP list is openned llRet=.T. lii=0 liData=500 STORE 1 TO fResult,liRead lcData="" DO WHILE liRead>0 liRead=0 lcBuffer=SPACE(liData) liResult = InternetReadFile(lihFTP, @lcBuffer, liData, @liRead) =This.GetExtendedError() This.AtList(@luData,@lcMask,liFlags,lnFlag,@lcBuffer,liResult) lcData=lcData+LEFT(lcBuffer,liRead) lii=lii+liRead ENDDO =InternetCloseHandle(lihFTP) =This.AfterList(luData,lcMask,liFlags,lnFlag,liResult) DO CASE CASE liResult=0 CASE !BITTEST(liFlags,0) AND !BITTEST(liFlags,2) && File? IF STRTOFILE(lcData,luData)=0 This.SetExtendedError(_FTPS_UE_CWF,"") llRet=.F. ENDIF CASE BITTEST(liFlags,0) && String? luData=lcData CASE BITTEST(liFlags,2) && Array? IF ISNULL(This.oLIstPE) This.oLIstPE=CREATEOBJECT("_LIST_PARSER_ENGINE") ENDIF This.oLIstPE.oFTP=This llRet=This.oLIstPE.Parse(@luData,@lcData) This.oLIstPE.oFTP=.NULL. ENDCASE ENDIF =IIF(This.lMultiOperations,.T.,This.CloseFTPConnection()) && Close FTP Handle RETURN llRet ELSE =IIF(This.lMultiOperations,.T.,This.CloseFTPConnection()) && Close FTP Handle RETURN .F. && Unable to get FTP Connection ENDIF