LPARAMETERS INP lcString, CHNGREF laDirectory
LOCAL lcFileName, lcAlterName, lnSizeHigh, lnSizeLow, lnFileSize, ;
lcAttributes, lnArrayLen, lcTimeBuff, ;
ldCreateDate, ldAccessDate, ldWriteDate, laNewArray, lnResult,lcPom
IF TYPE('m.laDirectory[1, 1]') = 'L' && Array Has Not Been Filed
* Force Record size of 1
DIMENSION m.laDirectory [1, 7]
ELSE
* Expand Array
DIMENSION m.laDirectory [ALEN(m.laDirectory, 1) + 1, 7]
ENDIF
* Get new Array Position
lnArrayLen = ALEN(m.laDirectory, 1)
*!* 4 DWORD dwFileAttributes;
*!* 8 FILETIME ftCreationTime;
*!* 8 FILETIME ftLastAccessTime;
*!* 8 FILETIME ftLastWriteTime;
*!* 4 DWORD nFileSizeHigh;
*!* 4 DWORD nFileSizeLow;
*!* 4 DWORD dwReserved0;
*!* 4 DWORD dwReserved1;
*!* 4 TCHAR cFileName[ MAX_PATH ];
*!* TCHAR cAlternateFileName[ 14 ];
*!* typedef struct _FILETIME {
*!* DWORD dwLowDateTime;
*!* DWORD dwHighDateTime;
*!* } FILETIME, *PFILETIME;
lcFileName = SUBSTR(m.lcString, 45, MAX_PATH)
lcAlterName = RIGHT(m.lcString, 14)
lcFileName = LEFT(m.lcFileName, AT(cNull, m.lcFileName) - 1) && Copy out just the File Name Text
lcAlterName = LEFT(m.lcAlterName, AT(cNull, m.lcAlterName) - 1)
* Convert File Size DWORDs
lnSizeHigh = (ASC(SUBSTR(m.lcString, 29, 1)) * BYTE_1) + ;
(ASC(SUBSTR(m.lcString, 30, 1)) * BYTE_2) + ;
(ASC(SUBSTR(m.lcString, 31, 1)) * BYTE_3) + ;
(ASC(SUBSTR(m.lcString, 32, 1)) * BYTE_4)
lnSizeLow = (ASC(SUBSTR(m.lcString, 33, 1)) * BYTE_1) + ;
(ASC(SUBSTR(m.lcString, 34, 1)) * BYTE_2) + ;
(ASC(SUBSTR(m.lcString, 35, 1)) * BYTE_3) + ;
(ASC(SUBSTR(m.lcString, 36, 1)) * BYTE_4)
* Build File Size
lnFileSize = (m.lnSizeHigh * MAXDWORD) + m.lnSizeLow
*!* FtpGetFileSize does not work as expected for files greater then 4Gb (dwFileSizeHigh always NULL)
*!* http://groups.google.com.ar/group/microsoft.public.windows.inetexplorer.ie5.programming.wininet/browse_thread/thread/3c118ed4c7c32269/791a868311e60a00?lnk=st&q=ftpfindfirstfile+and+large+files&rnum=2&hl=es#791a868311e60a00
* Convert File Date
* Get File Create DateTime
lcTimeBuff = SUBSTR(m.lcString, 5, 8)
ldCreateDate = This.CrackDate(m.lcTimeBuff)
* Get File Last Access DateTime
lcTimeBuff = SUBSTR(m.lcString, 13, 8)
ldAccessDate = This.CrackDate(m.lcTimeBuff)
* Get File Last Write DateTime
lcTimeBuff = SUBSTR(m.lcString, 21, 8)
ldWriteDate = This.CrackDate(m.lcTimeBuff)
* Get File Attributes
lcAttributes = This.CrackAttributes(LEFT(m.lcString, 4))
laDirectory[m.lnArrayLen, 1] = ALLTRIM(m.lcFileName)
laDirectory[m.lnArrayLen, 2] = ALLTRIM(m.lcAlterName)
laDirectory[m.lnArrayLen, 3] = m.lnFileSize
laDirectory[m.lnArrayLen, 4] = m.ldCreateDate
laDirectory[m.lnArrayLen, 5] = m.ldAccessDate
laDirectory[m.lnArrayLen, 6] = m.ldWriteDate
laDirectory[m.lnArrayLen, 7] = m.lcAttributes
RETURN