Class: | FTP_SERVICE |
Description: | Get a list of files and folders from the current directory on the FTP Server |
Type | Character/Array |
By reference | |
Direction | Input |
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. |
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,m.liFlags) lnFlag=IIF(PCOUNT()<4,FTP_TRANSFER_TYPE_ASCII,m.lnFlag) IF This.OpenFTPConnection(This.cCurrentDir) && Open an FTP Handle IF BITTEST(m.liFlags,2) && Array? DIMENSION m.luData [1, 1] luData [1, 1] = .NULL. ENDIF lihFTP=0 This.BeforeNLST(@m.luData,@m.lcMask,m.liFlags,m.lnFlag) liResult=IIF(This._FTPCommand("NLST "+m.lcMask,FTP_TRANSFER_TYPE_ASCII,0,@m.lihFTP),1,0) IF m.liResult #0 && OK, FTP list is openned llRet=.T. lii=0 liData=500 STORE 1 TO fResult,liRead lcData="" DO WHILE m.liRead>0 liRead=0 lcBuffer=SPACE(m.liData) liResult = InternetReadFile(m.lihFTP, @m.lcBuffer, m.liData, @m.liRead) =This.GetExtendedError() This.AtNLST(@m.luData,@m.lcMask,m.liFlags,m.lnFlag,@m.lcBuffer,m.liResult) lcData=m.lcData+LEFT(m.lcBuffer,m.liRead) lii=m.lii+m.liRead ENDDO =InternetCloseHandle(m.lihFTP) DO CASE CASE m.liResult=0 CASE !BITTEST(m.liFlags,0) AND !BITTEST(m.liFlags,2) && File? IF STRTOFILE(m.lcData,m.luData)=0 This.SetExtendedError(_FTPS_UE_CWF,"") llRet=.F. ENDIF CASE BITTEST(m.liFlags,0) && String? luData=m.lcData CASE BITTEST(m.liFlags,2) && Array? * parse data by CRLF IF AT("\015\012",m.lcData)>0 && EPLF lcData=STRTRAN(m.lcData,"\015\012",CRLF) ENDIF IF VAL(STRTRAN(SUBS(VERSION(),LEN("Visual FoxPro ")+1,2),"0",""))>=6 liCount=ALINES(m.luData,m.lcData) ELSE liCount=OCCURS(CRLF,m.lcData) IF m.liCount>0 THEN DIME luData[m.liCount, 1] lii=1 liEnd=AT(CRLF,m.lcData,1) DO WHILE m.liEnd>0 luData[m.lii, 1]=LEFT(m.lcData,m.liEnd-1) lcData=SUBSTR(m.lcData,m.liEnd+2) liEnd=AT(CRLF,m.lcData,1) lii=m.lii+1 ENDDO ENDIF ENDIF ENDCASE ENDIF This.AfterNLST(m.luData,m.lcMask,m.liFlags,m.lnFlag,m.liResult) =IIF(This.lMultiOperations,.T.,This.CloseFTPConnection()) && Close FTP Handle RETURN m.llRet ELSE =IIF(This.lMultiOperations,.T.,This.CloseFTPConnection()) && Close FTP Handle RETURN .F. && Unable to get FTP Connection ENDIF