CrackFile Method
Class: FTP_SERVICE
Internal method for parsing file's attributes and storing to array.
=
Object.CrackFile
Parameter
lcString
FtpFindFirstFile/FtpNextFirstFile
Type Character
Direction Input
laDirectory
Array of files
Type Array
By reference  
Direction Input/Output
Holds an array of files after the function completes.
Return value Boolean
The return value is always .T.
Example
See source code of method FTP_SERVICE::GetFTPDirectoryArray()
See also
Expand/Collapse source code of procedure CrackFile Source Code
LPARAMETERS INP lcString, CHNGREF laDirectory
      LOCAL lcFileName, lcAlterName, lnSizeHigh, lnSizeLow, lnFileSize, ;
            lcAttributes, lnArrayLen, lcTimeBuff, ;
            ldCreateDate, ldAccessDate, ldWriteDate, laNewArray, lnResult

      IF TYPE('laDirectory[1, 1]') = 'L'    && Array Has Not Been Filed      
         * Force Record size of 1
         DIMENSION laDirectory [1, 7]
      ELSE    
         * Expand Array
         DIMENSION laDirectory [ALEN(laDirectory, 1) + 1, 7]
      ENDIF

      * Get new Array Position
      lnArrayLen = ALEN(laDirectory, 1)

      lcFileName = SUBSTR(lcString, 45, MAX_PATH)
      lcAlterName = RIGHT(lcString, 14)

      lcFileName = LEFT(lcFileName, AT(cNull, lcFileName) - 1)  && Copy out just the File Name Text
      lcAlterName = LEFT(lcAlterName, AT(cNull, lcAlterName) - 1)

      * Convert File Size DWORDs
      lnSizeHigh = (ASC(SUBSTR(lcString, 29, 1)) * BYTE_1) + ;
                   (ASC(SUBSTR(lcString, 30, 1)) * BYTE_2) + ;
                   (ASC(SUBSTR(lcString, 31, 1)) * BYTE_3) + ;
                   (ASC(SUBSTR(lcString, 32, 1)) * BYTE_4) 

      lnSizeLow =  (ASC(SUBSTR(lcString, 33, 1)) * BYTE_1) + ;
                   (ASC(SUBSTR(lcString, 34, 1)) * BYTE_2) + ;
                   (ASC(SUBSTR(lcString, 35, 1)) * BYTE_3) + ;
                   (ASC(SUBSTR(lcString, 36, 1)) * BYTE_4) 

      * Build File Size
      lnFileSize = (lnSizeHigh * MAXDWORD) + lnSizeLow

      * Convert File Date

      * Get File Create DateTime
      lcTimeBuff = SUBSTR(lcString, 5, 8)
      ldCreateDate = This.CrackDate(lcTimeBuff)

      * Get File Last Access DateTime
      lcTimeBuff = SUBSTR(lcString, 13, 8)
      ldAccessDate = This.CrackDate(lcTimeBuff)

      * Get File Last Write DateTime
      lcTimeBuff = SUBSTR(lcString, 21, 8)
      ldWriteDate = This.CrackDate(lcTimeBuff)

      * Get File Attributes
      lcAttributes = This.CrackAttributes(LEFT(lcString, 4))

      laDirectory[lnArrayLen, 1] = ALLTRIM(lcFileName)
      laDirectory[lnArrayLen, 2] = ALLTRIM(lcAlterName)
      laDirectory[lnArrayLen, 3] = lnFileSize
      laDirectory[lnArrayLen, 4] = ldCreateDate
      laDirectory[lnArrayLen, 5] = ldAccessDate
      laDirectory[lnArrayLen, 6] = ldWriteDate
      laDirectory[lnArrayLen, 7] = lcAttributes

      RETURN