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