ReadTree Method
Class: FTP_SERVICE
Description:Read Tree (folders and files)
This method retrieves a list of files and directories from the current directory on the FTP Server. The files and folders are placed in VFP cursor.
=
Object.ReadTree
Parameter
lcFolder
Input folder
Type Character
Direction Input
llChild
Flag if
Type Boolean
Direction Input
lcAlias
VFP cursor alias
Type Character
Direction Input
Holds an cursor of files and folders after the function completes.
The cursor has the following structure:
TypeNameDescription
MFolderLong file name if available
MNameLong file name if available
MAlterNameShort file name if available
NSizeSize of file in bytes
TCDFile create date and time
TLATLast access date and time
TLWTLast write date and time
CAttribFile attributes
Return value Boolean
Returns .T. if the function successfully returned content the current directory on the FTP Server. Returns .F. if the function could not get content the current directory.
Example
LOCAL loFTP,lii,lcAlias,lcAResult LOCAL ARRAY laFolders(1) #INCLUDE "ftp.h" SET PROCEDURE TO ftp.prg ADDITIVE loFTP=CREATEOBJECT('ftp_service') lcAlias=SYS(2015) lcAResult=SYS(2015) IF loFTP.OpenInternet("ABONNE", "PWD", "10.10.10.10", "21") llNext=loFTP.ReadTree("",.T.,lcAlias) IF llNext SELECT PADR(folder+"/"+name,254),ALTERNAME M, SIZE, CD, LAT, LWT, ATTRIB FROM (lcAlias) INTO CURSOR (lcAResult) SELECT (lcAResult) BROWSE NORMAL ELSE ?loFTP.GetExtendedErrorCode(),loFTP.GetExtendedErrorMsg() ENDIF =loFTP.CloseInternet() ENDIF IF USED(lcAlias) USE IN (lcAlias) ENDIF IF USED(lcAResult) USE IN (lcAResult) ENDIF RELEASE PROCEDURE ftp.prg
See also
Expand/Collapse source code of procedure ReadTree Source Code
      LPARAMETERS INP lcFolder, INP llChild, INP lcAlias
      LOCAL llNext,liRecno,lii,liCount,lcCurFolder
      LOCAL ARRAY laFiles(1)

      IF This.OpenFTPConnection()     && Open an FTP Handle
         =This.BeforeReadTree(m.lcFolder,m.llChild,m.lcAlias)
         IF USED(m.lcAlias)
            USE IN (m.lcAlias)
         ENDIF
         CREATE CURSOR (m.lcAlias)  (FOLDER M, NAME M, ALTERNAME M, SIZE I, CD T, LAT T, LWT T, ATTRIB M)
         lcCurFolder=This.cCurrentDir
         llNext=IIF(!EMPTY(m.lcFolder),This.ChangeFTPDirectory(m.lcFolder),.T.)
         liCount=0
         llNext=m.llNext AND This.GetFTPDirectoryArray(@m.laFiles,"*.*",0,@m.liCount) && read all files and folders
         IF m.liCount>0
            FOR lii=1 TO ALEN(m.laFiles,1)
                INSERT INTO (m.lcAlias) (FOLDER, NAME, ALTERNAME, SIZE, CD, LAT, LWT, ATTRIB);
                  VALUES;
                  (This.cCurrentDir,m.laFiles(m.lii,1),m.laFiles(m.lii,2),m.laFiles(m.lii,3),m.laFiles(m.lii,4),m.laFiles(m.lii,5),m.laFiles(m.lii,6),m.laFiles(m.lii,7))
            NEXT

            SELECT (m.lcAlias)
            GO TOP
            SCAN WHILE m.llNext AND m.llChild
                 IF NOT ATTRIB=="D" 
                    LOOP
                 ENDIF   

                 liRecno=RECNO()

                 llNext=This.ChangeFTPDirectory(FOLDER+"/"+NAME)
                 llNext=m.llNext AND This.GetFTPDirectoryArray(@m.laFiles,"*.*",0,@m.liCount) && read all files and folders
                 IF m.liCount>0 
                    FOR lii=1 TO ALEN(m.laFiles,1)
                        INSERT INTO (m.lcAlias) (FOLDER, NAME, ALTERNAME, SIZE, CD, LAT, LWT, ATTRIB);
                           VALUES;
                           (This.cCurrentDir,m.laFiles(m.lii,1),m.laFiles(m.lii,2),m.laFiles(m.lii,3),m.laFiles(m.lii,4),m.laFiles(m.lii,5),m.laFiles(m.lii,6),m.laFiles(m.lii,7))
                    NEXT
                 ENDIF   
                 
                 SELECT (m.lcAlias)
                 GO (m.liRecno)
            ENDSCAN 
         ENDIF
         =This.ChangeFTPDirectory(m.lcCurFolder)

         =This.AfterReadTree(m.lcFolder,m.llChild,m.lcAlias,m.llNext)
         =IIF(This.lMultiOperations,.T.,This.CloseFTPConnection())   && Close FTP Handle
         RETURN m.llNext
      ENDIF
      RETURN .F.