This function is working for download from microsoft ftp:
[code]
****************************************
STATIC FUNCTION F_FtpListFilesMicrosoft( cFileSpec )
****************************************
LOCAL Self := HB_QSelf(),;
cOldFormato,;
cList,;
aList,;
cEntry,;
nStart,;
nEnd,;
cTime,;
aFile
cList := ::list( cFileSpec )
IF Empty( cList )
RETURN {}
ENDIF
aList := hb_ATokens( StrTran( cList, Chr(13 ),'' ), Chr( 10 ) )
// Windows FTP Server Response Format
// DateCreated IsDirectory Name
FOR EACH cEntry IN aList
IF Empty( cEntry ) //PM:09-08-2007 Needed because of the new
HB_aTokens()
ADel( aList, HB_EnumIndex(), .T. )
ELSE
aFile := Array( F_LEN + 3 )
nStart := 1
nEnd := At( Chr( 32 ), cEntry, nStart )
// file date
aFile[F_DATE] := SubStr( cEntry, nStart, nEnd - nStart ) //
mm-dd-yy
cOldFormato := SET( _SET_DATEFORMAT )
SET( _SET_DATEFORMAT, 'MM-DD-YY' )
aFile[F_DATE] := CTOD( aFile[F_DATE] )
SET( _SET_DATEFORMAT, cOldFormato )
nStart := nEnd
// file time
DO WHILE cEntry[++nStart] == " " ; ENDDO
nEnd := At( Chr( 32 ), cEntry, nStart )
aFile[F_TIME] := UPPER( SubStr( cEntry, nStart, nEnd - nStart ) )
IF RIGHT( aFile[F_TIME], 2 ) = 'AM'
cTime := LEFT( aFile[F_TIME], 2 )
IF cTime = '12'
cTime := '00'
ENDIF
ELSE // PM
cTime := VAL( LEFT( aFile[F_TIME], 2 ) )
IF cTime <> 12
cTime += 12
ENDIF
cTime := STRZERO( cTime, 2 )
ENDIF
cTime += SUBS( aFile[F_TIME], 3, 3 ) + ':00'
aFile[F_TIME] := cTime // formato hh:mm:ss
nStart := nEnd
// proximos parses: file permissions (attributes) e filesize
DO WHILE cEntry[++nStart] == " " ; ENDDO
nEnd := At( Chr( 32 ), cEntry, nStart )
aFile[F_SIZE] := UPPER( SubStr( cEntry, nStart, nEnd - nStart ) )
IF '<DIR>' IN aFile[F_SIZE]
aFile[F_ATTR] := 'd' // � diret�rio
aFile[F_SIZE] := 0
ELSE
aFile[F_ATTR] := '-' // regular file
aFile[F_SIZE] := VAL( aFile[F_SIZE] )
ENDIF
nStart := nEnd
// file name
DO WHILE cEntry[++nStart] == " " ; ENDDO
aFile[F_NAME] := SubStr( cEntry, nStart )
// # of links
aFile[F_LEN+1] := 0
// owner name
aFile[F_LEN+2] := ''
// group name
aFile[F_LEN+3] := ''
aList[ HB_EnumIndex() ] := aFile
ENDIF
NEXT
RETURN aList
[/code]
TIA,
Fabio Nery
news:kmh7kd$bhd$1...@dont-email.me...