123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917 |
- #include-once
- #include "Date.au3"
- #include "FileConstants.au3"
- #include "StructureConstants.au3"
- #include "WinAPIConv.au3"
- #include "WinAPIError.au3"
- ; #INDEX# =======================================================================================================================
- ; Title .........: FTP
- ; AutoIt Version : 3.3.14.5
- ; Language ......: English
- ; Description ...: Functions that assist with FTP.
- ; Author(s) .....: Wouter, Prog@ndy, jpm, Beege
- ; Notes .........: based on FTP_Ex.au3 16/02/2009 http://www.autoit.de/index.php?page=Thread&postID=48393
- ; ===============================================================================================================================
- ; #VARIABLES# ===================================================================================================================
- Global $__g_hWinInet_FTP = -1
- Global $__g_hCallback_FTP, $__g_bCallback_FTP = False
- ; ===============================================================================================================================
- ; #CONSTANTS# ===================================================================================================================
- Global Const $INTERNET_OPEN_TYPE_DIRECT = 1
- Global Const $INTERNET_OPEN_TYPE_PRECONFIG = 0
- Global Const $INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4
- Global Const $INTERNET_OPEN_TYPE_PROXY = 3
- Global Const $FTP_TRANSFER_TYPE_UNKNOWN = 0 ;Defaults to FTP_TRANSFER_TYPE_BINARY.
- Global Const $FTP_TRANSFER_TYPE_ASCII = 1 ;Type A transfer method. Control and formatting information is converted to local equivalents.
- Global Const $FTP_TRANSFER_TYPE_BINARY = 2 ;Type I transfer method. The file is transferred exactly as it exists with no changes.
- Global Const $INTERNET_FLAG_DEFAULT = 0
- Global Const $INTERNET_FLAG_PASSIVE = 0x08000000
- Global Const $INTERNET_FLAG_TRANSFER_ASCII = $FTP_TRANSFER_TYPE_ASCII
- Global Const $INTERNET_FLAG_TRANSFER_BINARY = $FTP_TRANSFER_TYPE_BINARY
- Global Const $INTERNET_DEFAULT_FTP_PORT = 21
- Global Const $INTERNET_SERVICE_FTP = 1
- Global Const $INTERNET_SERVICE_GOPHER = 2
- Global Const $INTERNET_SERVICE_HTTP = 3
- ; _FTP_FindFileFirst flags
- Global Const $INTERNET_FLAG_HYPERLINK = 0x00000400
- Global Const $INTERNET_FLAG_NEED_FILE = 0x00000010
- Global Const $INTERNET_FLAG_NO_CACHE_WRITE = 0x04000000
- Global Const $INTERNET_FLAG_RELOAD = 0x80000000
- Global Const $INTERNET_FLAG_RESYNCHRONIZE = 0x00000800
- ; _FTP_Open flags
- Global Const $INTERNET_FLAG_ASYNC = 0x10000000
- Global Const $INTERNET_FLAG_FROM_CACHE = 0x01000000
- Global Const $INTERNET_FLAG_OFFLINE = $INTERNET_FLAG_FROM_CACHE
- ; _FTP_...() Status
- Global Const $INTERNET_STATUS_CLOSING_CONNECTION = 50
- Global Const $INTERNET_STATUS_CONNECTION_CLOSED = 51
- Global Const $INTERNET_STATUS_CONNECTING_TO_SERVER = 20
- Global Const $INTERNET_STATUS_CONNECTED_TO_SERVER = 21
- Global Const $INTERNET_STATUS_CTL_RESPONSE_RECEIVED = 42
- Global Const $INTERNET_STATUS_INTERMEDIATE_RESPONSE = 120
- Global Const $INTERNET_STATUS_PREFETCH = 43
- Global Const $INTERNET_STATUS_REDIRECT = 110
- Global Const $INTERNET_STATUS_REQUEST_COMPLETE = 100
- Global Const $INTERNET_STATUS_HANDLE_CREATED = 60
- Global Const $INTERNET_STATUS_HANDLE_CLOSING = 70
- Global Const $INTERNET_STATUS_SENDING_REQUEST = 30
- Global Const $INTERNET_STATUS_REQUEST_SENT = 31
- Global Const $INTERNET_STATUS_RECEIVING_RESPONSE = 40
- Global Const $INTERNET_STATUS_RESPONSE_RECEIVED = 41
- Global Const $INTERNET_STATUS_STATE_CHANGE = 200
- Global Const $INTERNET_STATUS_RESOLVING_NAME = 10
- Global Const $INTERNET_STATUS_NAME_RESOLVED = 11
- ; ===============================================================================================================================
- ; #CURRENT# =====================================================================================================================
- ; _FTP_Close
- ; _FTP_Command
- ; _FTP_Connect
- ; _FTP_DecodeInternetStatus
- ; _FTP_DirCreate
- ; _FTP_DirDelete
- ; _FTP_DirGetCurrent
- ; _FTP_DirPutContents
- ; _FTP_DirSetCurrent
- ; _FTP_FileClose
- ; _FTP_FileDelete
- ; _FTP_FileGet
- ; _FTP_FileGetSize
- ; _FTP_FileOpen
- ; _FTP_FilePut
- ; _FTP_FileRead
- ; _FTP_FileRename
- ; _FTP_FileTimeLoHiToStr
- ; _FTP_FindFileClose
- ; _FTP_FindFileFirst
- ; _FTP_FindFileNext
- ; _FTP_GetLastResponseInfo
- ; _FTP_ListToArray
- ; _FTP_ListToArray2D
- ; _FTP_ListToArrayEx
- ; _FTP_Open
- ; _FTP_ProgressDownload
- ; _FTP_ProgressUpload
- ; _FTP_SetStatusCallback
- ; ===============================================================================================================================
- ; #INTERNAL_USE_ONLY#============================================================================================================
- ; __FTP_ListToArray
- ; __FTP_Init
- ; ===============================================================================================================================
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......: Beege
- ; ===============================================================================================================================
- Func _FTP_Close($hSession)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $hSession)
- If @error Or $aDone[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- If $__g_bCallback_FTP = True Then DllCallbackFree($__g_hCallback_FTP)
- Return $aDone[0]
- EndFunc ;==>_FTP_Close
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Bill Mezian
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_Command($hFTPSession, $sFTPCommand, $iFlags = $FTP_TRANSFER_TYPE_ASCII, $iExpectResponse = 0, $iContext = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPCommand = DllCall($__g_hWinInet_FTP, 'bool', 'FtpCommandW', 'handle', $hFTPSession, 'bool', $iExpectResponse, 'dword', $iFlags, 'wstr', $sFTPCommand, 'dword_ptr', $iContext, 'ptr*', 0)
- If @error Or $ai_FTPCommand[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return SetError(0, $ai_FTPCommand[6], $ai_FTPCommand[0])
- EndFunc ;==>_FTP_Command
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_Connect($hInternetSession, $sServerName, $sUsername, $sPassword, $iPassive = 0, $iServerPort = 0, $iService = $INTERNET_SERVICE_FTP, $iFlags = 0, $fuContext = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- If $iPassive == 1 Then $iFlags = BitOR($iFlags, $INTERNET_FLAG_PASSIVE)
- Local $ai_InternetConnect = DllCall($__g_hWinInet_FTP, 'hwnd', 'InternetConnectW', 'handle', $hInternetSession, 'wstr', $sServerName, 'ushort', $iServerPort, 'wstr', $sUsername, 'wstr', $sPassword, 'dword', $iService, 'dword', $iFlags, 'dword_ptr', $fuContext)
- If @error Or $ai_InternetConnect[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_InternetConnect[0]
- EndFunc ;==>_FTP_Connect
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Beege
- ; Modified.......: jpm
- ; ===============================================================================================================================
- Func _FTP_DecodeInternetStatus($iInternetStatus)
- Switch $iInternetStatus
- Case $INTERNET_STATUS_CLOSING_CONNECTION
- Return 'Closing connection ...'
- Case $INTERNET_STATUS_CONNECTION_CLOSED
- Return 'Connection closed'
- Case $INTERNET_STATUS_CONNECTING_TO_SERVER
- Return 'Connecting to server ...'
- Case $INTERNET_STATUS_CONNECTED_TO_SERVER
- Return 'Connected to server'
- Case $INTERNET_STATUS_CTL_RESPONSE_RECEIVED
- Return 'CTL esponse received'
- Case $INTERNET_STATUS_INTERMEDIATE_RESPONSE
- Return 'Intermediate response'
- Case $INTERNET_STATUS_PREFETCH
- Return 'Prefetch'
- Case $INTERNET_STATUS_REDIRECT
- Return 'Redirect'
- Case $INTERNET_STATUS_REQUEST_COMPLETE
- Return 'Request complete'
- Case $INTERNET_STATUS_HANDLE_CREATED
- Return 'Handle created'
- Case $INTERNET_STATUS_HANDLE_CLOSING
- Return 'Handle closing ...'
- Case $INTERNET_STATUS_SENDING_REQUEST
- Return 'Sending request ...'
- Case $INTERNET_STATUS_REQUEST_SENT
- Return 'Request sent'
- Case $INTERNET_STATUS_RECEIVING_RESPONSE
- Return 'Receiving response ...'
- Case $INTERNET_STATUS_RESPONSE_RECEIVED
- Return 'Response received'
- Case $INTERNET_STATUS_STATE_CHANGE
- Return 'State change'
- Case $INTERNET_STATUS_RESOLVING_NAME
- Return 'Resolving name ...'
- Case $INTERNET_STATUS_NAME_RESOLVED
- Return 'Name resolved'
- Case Else
- Return 'UNKNOWN status = ' & $iInternetStatus
- EndSwitch
- EndFunc ;==>_FTP_DecodeInternetStatus
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_DirCreate($hFTPSession, $sRemote)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPMakeDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpCreateDirectoryW', 'handle', $hFTPSession, 'wstr', $sRemote)
- If @error Or $ai_FTPMakeDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPMakeDir[0]
- EndFunc ;==>_FTP_DirCreate
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_DirDelete($hFTPSession, $sRemote)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPDelDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpRemoveDirectoryW', 'handle', $hFTPSession, 'wstr', $sRemote)
- If @error Or $ai_FTPDelDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPDelDir[0]
- EndFunc ;==>_FTP_DirDelete
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Beast
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_DirGetCurrent($hFTPSession)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPGetCurrentDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpGetCurrentDirectoryW', 'handle', $hFTPSession, 'wstr', "", 'dword*', 260)
- If @error Or $ai_FTPGetCurrentDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPGetCurrentDir[2]
- EndFunc ;==>_FTP_DirGetCurrent
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Stumpii
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_DirPutContents($hFTPSession, $sLocalFolder, $sRemoteFolder, $bRecursivePut, $iContext = 0)
- If StringRight($sLocalFolder, 1) == "\" Then $sLocalFolder = StringTrimRight($sLocalFolder, 1)
- ; Shows the filenames of all files in the current directory.
- Local $hSearch = FileFindFirstFile($sLocalFolder & "\*.*")
- ; Check if the search was successful
- If $hSearch = -1 Then Return SetError(1, 0, 0)
- Local $sFile
- While 1
- $sFile = FileFindNextFile($hSearch)
- If @error Then ExitLoop
- If StringInStr(FileGetAttrib($sLocalFolder & "\" & $sFile), "D") Then
- _FTP_DirCreate($hFTPSession, $sRemoteFolder & "/" & $sFile)
- If $bRecursivePut Then
- _FTP_DirPutContents($hFTPSession, $sLocalFolder & "\" & $sFile, $sRemoteFolder & "/" & $sFile, $bRecursivePut, $iContext)
- EndIf
- Else
- _FTP_FilePut($hFTPSession, $sLocalFolder & "\" & $sFile, $sRemoteFolder & "/" & $sFile, 0, $iContext)
- EndIf
- WEnd
- ; Close the search handle
- FileClose($hSearch)
- Return 1
- EndFunc ;==>_FTP_DirPutContents
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Beast
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_DirSetCurrent($hFTPSession, $sRemote)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPSetCurrentDir = DllCall($__g_hWinInet_FTP, 'bool', 'FtpSetCurrentDirectoryW', 'handle', $hFTPSession, 'wstr', $sRemote)
- If @error Or $ai_FTPSetCurrentDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPSetCurrentDir[0]
- EndFunc ;==>_FTP_DirSetCurrent
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: joeyb1275
- ; Modified.......: Prog@ndy
- ; ===============================================================================================================================
- Func _FTP_FileClose($hFTPFile)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $hFTPFile)
- If @error Or $aDone[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $aDone[0]
- EndFunc ;==>_FTP_FileClose
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_FileDelete($hFTPSession, $sRemoteFile)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile)
- If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPPutFile[0]
- EndFunc ;==>_FTP_FileDelete
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_FileGet($hFTPSession, $sRemoteFile, $sLocalFile, $bFailIfExists = False, $iFlagsAndAttributes = 0, $iFlags = $FTP_TRANSFER_TYPE_UNKNOWN, $iContext = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPGetFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpGetFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'wstr', $sLocalFile, 'bool', $bFailIfExists, 'dword', $iFlagsAndAttributes, 'dword', $iFlags, 'dword_ptr', $iContext)
- If @error Or $ai_FTPGetFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPGetFile[0]
- EndFunc ;==>_FTP_FileGet
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Joachim de Koning
- ; Modified.......: jpm
- ; ===============================================================================================================================
- Func _FTP_FileGetSize($hFTPSession, $sFileName)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPGetSizeHandle = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sFileName, 'dword', $GENERIC_READ, 'dword', $INTERNET_FLAG_NO_CACHE_WRITE + $INTERNET_FLAG_TRANSFER_BINARY, 'dword_ptr', 0)
- If @error Or $ai_FTPGetSizeHandle[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Local $ai_FTPGetFileSize = DllCall($__g_hWinInet_FTP, 'dword', 'FtpGetFileSize', 'handle', $ai_FTPGetSizeHandle[0], 'dword*', 0)
- If @error Or $ai_FTPGetFileSize[0] = 0 Then
- Local $iLasterror = _WinAPI_GetLastError()
- DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FTPGetSizeHandle[0])
- ; No need to test @error.
- Return SetError(-1, $iLasterror, 0)
- EndIf
- DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FTPGetSizeHandle[0])
- ; No need to test @error.
- Return _WinAPI_MakeQWord($ai_FTPGetFileSize[0], $ai_FTPGetFileSize[2])
- EndFunc ;==>_FTP_FileGetSize
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: joeyb1275
- ; Modified.......: Prog@ndy
- ; ===============================================================================================================================
- Func _FTP_FileOpen($hConnect, $sFileName, $iAccess = $GENERIC_READ, $iFlags = $INTERNET_FLAG_TRANSFER_BINARY, $iContext = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hConnect, 'wstr', $sFileName, 'dword', $iAccess, 'dword', $iFlags, 'dword_ptr', $iContext)
- If @error Or $ai_FtpOpenfile[0] == 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FtpOpenfile[0]
- EndFunc ;==>_FTP_FileOpen
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_FilePut($hFTPSession, $sLocalFile, $sRemoteFile, $iFlags = 0, $iContext = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpPutFileW', 'handle', $hFTPSession, 'wstr', $sLocalFile, 'wstr', $sRemoteFile, 'dword', $iFlags, 'dword_ptr', $iContext)
- If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPPutFile[0]
- EndFunc ;==>_FTP_FilePut
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: joeyb1275
- ; Modified.......: Prog@ndy
- ; ===============================================================================================================================
- Func _FTP_FileRead($hFTPFile, $iNumberOfBytesToRead)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $tBuffer = DllStructCreate("byte[" & $iNumberOfBytesToRead & "]")
- Local $ai_FTPReadFile = DllCall($__g_hWinInet_FTP, 'bool', 'InternetReadFile', 'handle', $hFTPFile, 'struct*', $tBuffer, 'dword', $iNumberOfBytesToRead, 'dword*', 0) ;LPDWORD lpdwNumberOfBytesRead
- If @error Then Return SetError(1, _WinAPI_GetLastError(), 0)
- Local $iNumberOfBytesRead = $ai_FTPReadFile[4]
- If $iNumberOfBytesRead == 0 And $ai_FTPReadFile[0] == 1 Then
- Return SetError(-1, 0, 0)
- ElseIf $ai_FTPReadFile[0] == 0 Then
- Return SetError(2, _WinAPI_GetLastError(), 0)
- EndIf
- Local $s_FileRead
- If $iNumberOfBytesToRead > $iNumberOfBytesRead Then
- $s_FileRead = BinaryMid(DllStructGetData($tBuffer, 1), 1, $iNumberOfBytesRead) ;index is omitted so the entire array is written into $s_FileRead as a BinaryString
- Else
- $s_FileRead = DllStructGetData($tBuffer, 1) ;index is omitted so the entire array is written into $s_FileRead as a BinaryString
- EndIf
- Return SetError(0, $iNumberOfBytesRead, $s_FileRead)
- EndFunc ;==>_FTP_FileRead
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_FileRename($hFTPSession, $sExisting, $sNew)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPRenameFile = DllCall($__g_hWinInet_FTP, 'bool', 'FtpRenameFileW', 'handle', $hFTPSession, 'wstr', $sExisting, 'wstr', $sNew)
- If @error Or $ai_FTPRenameFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_FTPRenameFile[0]
- EndFunc ;==>_FTP_FileRename
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Prog@ndy
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_FileTimeLoHiToStr($iLoDWORD, $iHiDWORD, $iFmt = 0)
- Local $tFileTime = DllStructCreate($tagFILETIME)
- If Not $iLoDWORD And Not $iHiDWORD Then Return SetError(1, 0, "")
- DllStructSetData($tFileTime, 1, $iLoDWORD)
- DllStructSetData($tFileTime, 2, $iHiDWORD)
- Local $sDate = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- Return SetError(@error, @extended, $sDate)
- EndFunc ;==>_FTP_FileTimeLoHiToStr
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Dick Bronsdijk
- ; Modified.......: Prog@ndy, jpm
- ; ===============================================================================================================================
- Func _FTP_FindFileClose($hFTPFind)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $hFTPFind)
- If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), "")
- Return $ai_FTPPutFile[0]
- EndFunc ;==>_FTP_FindFileClose
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Dick Bronsdijk
- ; Modified.......: Prog@ndy, jpm
- ; ===============================================================================================================================
- Func _FTP_FindFileFirst($hFTPSession, $sRemotePath, ByRef $hFTPFind, $iFlags = 0, $iContext = 0)
- ;flags = 0 changed to $INTERNET_FLAG_TRANSFER_BINARY to see if stops hanging
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $t_DllStruct = DllStructCreate($tagWIN32_FIND_DATA)
- If @error Then Return SetError(-3, 0, "")
- Local $a_FTPFileList[1]
- $a_FTPFileList[0] = 0
- Local $ai_FTPFirstFile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $hFTPSession, 'wstr', $sRemotePath, 'struct*', $t_DllStruct, 'dword', $iFlags, 'dword_ptr', $iContext)
- If @error Or $ai_FTPFirstFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), $ai_FTPFirstFile)
- $hFTPFind = $ai_FTPFirstFile[0]
- Local $a_FTPFileList[12]
- $a_FTPFileList[0] = 11
- $a_FTPFileList[1] = DllStructGetData($t_DllStruct, "dwFileAttributes")
- $a_FTPFileList[2] = DllStructGetData($t_DllStruct, "ftCreationTime", 1)
- $a_FTPFileList[3] = DllStructGetData($t_DllStruct, "ftCreationTime", 2)
- $a_FTPFileList[4] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 1)
- $a_FTPFileList[5] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 2)
- $a_FTPFileList[6] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 1)
- $a_FTPFileList[7] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 2)
- $a_FTPFileList[8] = DllStructGetData($t_DllStruct, "nFileSizeHigh")
- $a_FTPFileList[9] = DllStructGetData($t_DllStruct, "nFileSizeLow")
- $a_FTPFileList[10] = DllStructGetData($t_DllStruct, "cFileName")
- $a_FTPFileList[11] = DllStructGetData($t_DllStruct, "cAlternateFileName")
- Return $a_FTPFileList
- EndFunc ;==>_FTP_FindFileFirst
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Dick Bronsdijk
- ; Modified.......: Prog@ndy, jpm
- ; ===============================================================================================================================
- Func _FTP_FindFileNext($hFTPFind)
- Local $t_DllStruct = DllStructCreate($tagWIN32_FIND_DATA)
- Local $a_FTPFileList[1]
- $a_FTPFileList[0] = 0
- Local $ai_FTPPutFile = DllCall($__g_hWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $hFTPFind, 'struct*', $t_DllStruct)
- If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), $a_FTPFileList)
- Local $a_FTPFileList[12]
- $a_FTPFileList[0] = 11
- $a_FTPFileList[1] = DllStructGetData($t_DllStruct, "dwFileAttributes")
- $a_FTPFileList[2] = DllStructGetData($t_DllStruct, "ftCreationTime", 1)
- $a_FTPFileList[3] = DllStructGetData($t_DllStruct, "ftCreationTime", 2)
- $a_FTPFileList[4] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 1)
- $a_FTPFileList[5] = DllStructGetData($t_DllStruct, "ftLastAccessTime", 2)
- $a_FTPFileList[6] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 1)
- $a_FTPFileList[7] = DllStructGetData($t_DllStruct, "ftLastWriteTime", 2)
- $a_FTPFileList[8] = DllStructGetData($t_DllStruct, "nFileSizeHigh")
- $a_FTPFileList[9] = DllStructGetData($t_DllStruct, "nFileSizeLow")
- $a_FTPFileList[10] = DllStructGetData($t_DllStruct, "cFileName")
- $a_FTPFileList[11] = DllStructGetData($t_DllStruct, "cAlternateFileName")
- Return $a_FTPFileList
- EndFunc ;==>_FTP_FindFileNext
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: jpm
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_GetLastResponseInfo(ByRef $iError, ByRef $sMessage)
- Local $ai_LastResponseInfo = DllCall($__g_hWinInet_FTP, 'bool', 'InternetGetLastResponseInfoW', 'dword*', 0, 'wstr', "", 'dword*', 4096)
- If @error Or $ai_LastResponseInfo[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- $iError = $ai_LastResponseInfo[1]
- $sMessage = $ai_LastResponseInfo[2]
- Return $ai_LastResponseInfo[0]
- EndFunc ;==>_FTP_GetLastResponseInfo
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Beast, Prog@ndy
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_ListToArray($hFTPSession, $iReturnType = 0, $iFlags = $INTERNET_FLAG_NO_CACHE_WRITE, $iContext = 0)
- Local $aArray[1]
- $aArray[0] = 0
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray)
- $aArray = __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, 0, 1, $iContext)
- Return SetError(@error, @extended, $aArray)
- EndFunc ;==>_FTP_ListToArray
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Prog@ndy
- ; Modified.......: jpm
- ; ===============================================================================================================================
- Func _FTP_ListToArray2D($hFTPSession, $iReturnType = 0, $iFlags = $INTERNET_FLAG_NO_CACHE_WRITE, $iContext = 0)
- Local $aArray[1][1]
- $aArray[0][0] = 0
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray)
- $aArray = __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, 0, 2, $iContext)
- Return SetError(@error, @extended, $aArray)
- EndFunc ;==>_FTP_ListToArray2D
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Beast, Prog@ndy
- ; Modified.......: jpm
- ; ===============================================================================================================================
- Func _FTP_ListToArrayEx($hFTPSession, $iReturnType = 0, $iFlags = $INTERNET_FLAG_NO_CACHE_WRITE, $iFmt = 1, $iContext = 0)
- Local $aArray[1][1]
- $aArray[0][0] = 0
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, $aArray)
- $aArray = __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, $iFmt, 6, $iContext)
- Return SetError(@error, @extended, $aArray)
- EndFunc ;==>_FTP_ListToArrayEx
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: Wouter van Kesteren
- ; Modified.......:
- ; ===============================================================================================================================
- Func _FTP_Open($sAgent, $iAccessType = $INTERNET_OPEN_TYPE_DIRECT, $sProxyName = '', $sProxyBypass = '', $iFlags = 0)
- If $__g_hWinInet_FTP = -1 Then __FTP_Init()
- Local $ai_InternetOpen = DllCall($__g_hWinInet_FTP, 'handle', 'InternetOpenW', 'wstr', $sAgent, 'dword', $iAccessType, _
- 'wstr', $sProxyName, 'wstr', $sProxyBypass, 'dword', $iFlags)
- If @error Or $ai_InternetOpen[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Return $ai_InternetOpen[0]
- EndFunc ;==>_FTP_Open
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: limette, Prog@ndy
- ; Modified.......: jchd
- ; ===============================================================================================================================
- Func _FTP_ProgressDownload($hFTPSession, $sLocalFile, $sRemoteFile, $hFunctionToCall = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $hFile = FileOpen($sLocalFile, $FO_OVERWRITE + $FO_BINARY)
- If $hFile < 0 Then Return SetError(-1, 0, 0)
- Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'dword', $GENERIC_READ, 'dword', $FTP_TRANSFER_TYPE_BINARY, 'dword_ptr', 0)
- If @error Or $ai_FtpOpenfile[0] = 0 Then Return SetError(-3, _WinAPI_GetLastError(), 0)
- Local $ai_FTPGetFileSize = DllCall($__g_hWinInet_FTP, 'dword', 'FtpGetFileSize', 'handle', $ai_FtpOpenfile[0], 'dword*', 0)
- If @error Then Return SetError(-2, _WinAPI_GetLastError(), 0)
- If Not IsFunc($hFunctionToCall) Then ProgressOn("FTP Download", "Downloading " & $sLocalFile)
- Local $iLen = _WinAPI_MakeQWord($ai_FTPGetFileSize[0], $ai_FTPGetFileSize[2]) ;FileGetSize($sRemoteFile)
- Local Const $iChunkSize = 256 * 1024
- Local $iLast = Mod($iLen, $iChunkSize)
- Local $iParts = Ceiling($iLen / $iChunkSize)
- Local $tBuffer = DllStructCreate("byte[" & $iChunkSize & "]")
- Local $aDone, $ai_FTPread, $iOut, $iRet, $iLasterror
- Local $x = $iChunkSize
- Local $iDone = 0
- For $i = 1 To $iParts
- If $i = $iParts And $iLast > 0 Then
- $x = $iLast
- EndIf
- $ai_FTPread = DllCall($__g_hWinInet_FTP, 'bool', 'InternetReadFile', 'handle', $ai_FtpOpenfile[0], 'struct*', $tBuffer, 'dword', $x, 'dword*', $iOut)
- If @error Or $ai_FTPread[0] = 0 Then
- $iLasterror = _WinAPI_GetLastError()
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- ; No need to test @error.
- FileClose($hFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- Return SetError(-4, $iLasterror, 0)
- EndIf
- $iRet = FileWrite($hFile, BinaryMid(DllStructGetData($tBuffer, 1), 1, $ai_FTPread[4]))
- If Not $iRet Then
- $iLasterror = _WinAPI_GetLastError()
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- ; No need to test @error.
- FileClose($hFile)
- FileDelete($sLocalFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- Return SetError(-7, $iLasterror, 0)
- EndIf
- $iDone += $ai_FTPread[4]
- If Not IsFunc($hFunctionToCall) Then
- ProgressSet(($iDone / $iLen) * 100)
- Else
- $iRet = $hFunctionToCall(($iDone / $iLen) * 100)
- If $iRet <= 0 Then
- $iLasterror = @error
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- ; No need to test @error.
- FileClose($hFile)
- FileDelete($sLocalFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- Return SetError(-6, $iLasterror, $iRet)
- EndIf
- EndIf
- Sleep(10)
- Next
- FileClose($hFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- If @error Or $aDone[0] = 0 Then
- Return SetError(-5, _WinAPI_GetLastError(), 0)
- EndIf
- Return 1
- EndFunc ;==>_FTP_ProgressDownload
- ; #FUNCTION# ====================================================================================================================
- ; Author ........: limette, Prog@ndy
- ; Modified.......: jchd
- ; ===============================================================================================================================
- Func _FTP_ProgressUpload($hFTPSession, $sLocalFile, $sRemoteFile, $hFunctionToCall = 0)
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $hFile = FileOpen($sLocalFile, $FO_BINARY)
- If @error Then Return SetError(-1, _WinAPI_GetLastError(), 0)
- Local $ai_FtpOpenfile = DllCall($__g_hWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile, 'dword', $GENERIC_WRITE, 'dword', $FTP_TRANSFER_TYPE_BINARY, 'dword_ptr', 0)
- If @error Or $ai_FtpOpenfile[0] = 0 Then Return SetError(-3, _WinAPI_GetLastError(), 0)
- If Not IsFunc($hFunctionToCall) Then ProgressOn("FTP Upload", "Uploading " & $sLocalFile)
- Local $iLen = FileGetSize($sLocalFile)
- Local Const $iChunkSize = 256 * 1024
- Local $iLast = Mod($iLen, $iChunkSize)
- Local $iParts = Ceiling($iLen / $iChunkSize)
- Local $tBuffer = DllStructCreate("byte[" & $iChunkSize & "]")
- Local $aDone, $ai_FtpWrite, $iOut, $iRet, $iLasterror
- Local $x = $iChunkSize
- Local $iDone = 0
- For $i = 1 To $iParts
- If $i = $iParts And $iLast > 0 Then
- $x = $iLast
- EndIf
- DllStructSetData($tBuffer, 1, FileRead($hFile, $x))
- $ai_FtpWrite = DllCall($__g_hWinInet_FTP, 'bool', 'InternetWriteFile', 'handle', $ai_FtpOpenfile[0], 'struct*', $tBuffer, 'dword', $x, 'dword*', $iOut)
- If @error Or $ai_FtpWrite[0] = 0 Then
- $iLasterror = _WinAPI_GetLastError()
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- ; No need to test @error.
- FileClose($hFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- Return SetError(-4, $iLasterror, 0)
- EndIf
- $iDone += $x
- If Not IsFunc($hFunctionToCall) Then
- ProgressSet(($iDone / $iLen) * 100)
- Else
- $iRet = $hFunctionToCall(($iDone / $iLen) * 100)
- If $iRet <= 0 Then
- $iLasterror = @error
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- ; No need to test @error.
- DllCall($__g_hWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $hFTPSession, 'wstr', $sRemoteFile)
- ; No need to test @error.
- FileClose($hFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- Return SetError(-6, $iLasterror, $iRet)
- EndIf
- EndIf
- Sleep(10)
- Next
- FileClose($hFile)
- If Not IsFunc($hFunctionToCall) Then ProgressOff()
- $aDone = DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FtpOpenfile[0])
- ; No need to test @error.
- If @error Or $aDone[0] = 0 Then Return SetError(-5, _WinAPI_GetLastError(), 0)
- Return 1
- EndFunc ;==>_FTP_ProgressUpload
- ; FUNCTION# ====================================================================================================================
- ; Name...........: _FTP_SetStatusCallback
- ; Description ...: Registers callback function that WinINet functions can call as progress is made during an operation.
- ; Syntax.........: _InternetSetStatusCallback ($hInternetSession, $sFunctionName )
- ; Parameters ....: $hInternetSession - as returned by _FTP_Open().
- ; $sFunctionName - The name of the User Defined Function to call
- ; Return values .: Success - Pointer to callback function
- ; Failure - 0 and Set @error
- ; Author ........: Beege
- ; Modified.......: jpm
- ; Remarks .......:
- ; Related .......: _FTP_DecodeInternetStatus
- ; Link ..........: @@MsdnLink@@ InternetSetStatusCallback
- ; Example .......: Yes
- ; ===============================================================================================================================
- Func _FTP_SetStatusCallback($hInternetSession, $sFunctionName)
- #Au3Stripper_Ignore_Funcs=$sFunctionName
- If $__g_hWinInet_FTP = -1 Then Return SetError(-2, 0, 0)
- Local $hCallBack_Register = DllCallbackRegister($sFunctionName, "none", "ptr;ptr;dword;ptr;dword")
- If Not $hCallBack_Register Then Return SetError(-1, 0, 0)
- Local $ah_CallBackFunction = DllCall('wininet.dll', "ptr", "InternetSetStatusCallback", "ptr", $hInternetSession, "ulong_ptr", DllCallbackGetPtr($hCallBack_Register))
- If @error Then Return SetError(-3, 0, 0)
- If $ah_CallBackFunction[0] = Ptr(-1) Then Return SetError(-4, 0, 0) ; INTERNET_INVALID_STATUS_CALLBACK
- $__g_bCallback_FTP = True
- $__g_hCallback_FTP = $hCallBack_Register
- Return $ah_CallBackFunction[1]
- EndFunc ;==>_FTP_SetStatusCallback
- ; #INTERNAL_USE_ONLY# ===========================================================================================================
- ; Name...........: __FTP_ListToArray
- ; Description ...:
- ; Syntax.........: __FTP_ListToArray ( $hFTPSession [, $iReturnType = 0 [, $iFlags = 0 [, $iFmt = 1 [, $iArrayCount = 6 [, $iContext = 0 ]]]]] )
- ; Parameters ....:
- ; Return values .: an 2D array with the requested info defined by $iArrayCount
- ; [0] Filename
- ; [1] Filesize
- ; [2] FileAttribute
- ; [3] File Modification time
- ; [4] File Creation time
- ; [5] File Access time
- ; Author ........: Beast, Prog@ndy
- ; Modified.......: jpm (to be use by external UDFs)
- ; Remarks .......:
- ; Related .......:
- ; Link ..........:
- ; Example .......:
- ; ===============================================================================================================================
- Func __FTP_ListToArray($hFTPSession, $iReturnType, $iFlags, $iFmt, $iArrayCount, $iContext)
- If $iArrayCount = 1 Then
- Local $asFileArray[1], $aDirectoryArray[1]
- $asFileArray[0] = 0
- Else
- Local $asFileArray[1][$iArrayCount], $aDirectoryArray[1][$iArrayCount]
- $asFileArray[0][0] = 0
- EndIf
- If $iReturnType < 0 Or $iReturnType > 2 Then Return SetError(3, 0, $asFileArray)
- ; Global Const $tagWIN32_FIND_DATA = "DWORD dwFileAttributes; dword ftCreationTime[2]; dword ftLastAccessTime[2]; dword ftLastWriteTime[2]; DWORD nFileSizeHigh; DWORD nFileSizeLow; dword dwReserved0; dword dwReserved1; WCHAR cFileName[260]; WCHAR cAlternateFileName[14];"
- Local $tWIN32_FIND_DATA = DllStructCreate($tagWIN32_FIND_DATA)
- Local $iLasterror
- Local $aCallFindFirst = DllCall($__g_hWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $hFTPSession, 'wstr', "", 'struct*', $tWIN32_FIND_DATA, 'dword', $iFlags, 'dword_ptr', $iContext)
- If @error Or Not $aCallFindFirst[0] Then
- $iLasterror = _WinAPI_GetLastError()
- If $iLasterror = 12003 Then ; ERROR_INTERNET_EXTENDED_ERROR
- Local $iError, $sMessage
- _FTP_GetLastResponseInfo($iError, $sMessage)
- $iLasterror = $iError
- EndIf
- Return SetError(1, $iLasterror, $asFileArray)
- EndIf
- Local $iDirectoryIndex = 0, $sFileIndex = 0
- Local $tFileTime, $bIsDir, $aCallFindNext
- Do
- $bIsDir = BitAND(DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes"), $FILE_ATTRIBUTE_DIRECTORY) = $FILE_ATTRIBUTE_DIRECTORY
- If $bIsDir And ($iReturnType <> 2) Then
- $iDirectoryIndex += 1
- If $iArrayCount = 1 Then
- If UBound($aDirectoryArray) < $iDirectoryIndex + 1 Then ReDim $aDirectoryArray[$iDirectoryIndex * 2]
- $aDirectoryArray[$iDirectoryIndex] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
- Else
- If UBound($aDirectoryArray) < $iDirectoryIndex + 1 Then ReDim $aDirectoryArray[$iDirectoryIndex * 2][$iArrayCount]
- $aDirectoryArray[$iDirectoryIndex][0] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
- $aDirectoryArray[$iDirectoryIndex][1] = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh"))
- If $iArrayCount = 6 Then
- $aDirectoryArray[$iDirectoryIndex][2] = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes")
- $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime"))
- $aDirectoryArray[$iDirectoryIndex][3] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime"))
- $aDirectoryArray[$iDirectoryIndex][4] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime"))
- $aDirectoryArray[$iDirectoryIndex][5] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- EndIf
- EndIf
- ElseIf Not $bIsDir And $iReturnType <> 1 Then
- $sFileIndex += 1
- If $iArrayCount = 1 Then
- If UBound($asFileArray) < $sFileIndex + 1 Then ReDim $asFileArray[$sFileIndex * 2]
- $asFileArray[$sFileIndex] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
- Else
- If UBound($asFileArray) < $sFileIndex + 1 Then ReDim $asFileArray[$sFileIndex * 2][$iArrayCount]
- $asFileArray[$sFileIndex][0] = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
- $asFileArray[$sFileIndex][1] = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh"))
- If $iArrayCount = 6 Then
- $asFileArray[$sFileIndex][2] = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes")
- $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime"))
- $asFileArray[$sFileIndex][3] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime"))
- $asFileArray[$sFileIndex][4] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime"))
- $asFileArray[$sFileIndex][5] = _Date_Time_FileTimeToStr($tFileTime, $iFmt)
- EndIf
- EndIf
- EndIf
- $aCallFindNext = DllCall($__g_hWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $aCallFindFirst[0], 'struct*', $tWIN32_FIND_DATA)
- If @error Then
- $iLasterror = _WinAPI_GetLastError()
- DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $aCallFindFirst[0])
- Return SetError(2, $iLasterror, $asFileArray)
- EndIf
- Until Not $aCallFindNext[0]
- DllCall($__g_hWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $aCallFindFirst[0])
- ; No need to test @error.
- If $iArrayCount = 1 Then
- $aDirectoryArray[0] = $iDirectoryIndex
- $asFileArray[0] = $sFileIndex
- Else
- $aDirectoryArray[0][0] = $iDirectoryIndex
- $asFileArray[0][0] = $sFileIndex
- EndIf
- Switch $iReturnType
- Case 0
- If $iArrayCount = 1 Then
- ReDim $aDirectoryArray[$aDirectoryArray[0] + $asFileArray[0] + 1]
- For $i = 1 To $sFileIndex
- $aDirectoryArray[$aDirectoryArray[0] + $i] = $asFileArray[$i]
- Next
- $aDirectoryArray[0] += $asFileArray[0]
- Else
- ReDim $aDirectoryArray[$aDirectoryArray[0][0] + $asFileArray[0][0] + 1][$iArrayCount]
- For $i = 1 To $sFileIndex
- For $j = 0 To $iArrayCount - 1
- $aDirectoryArray[$aDirectoryArray[0][0] + $i][$j] = $asFileArray[$i][$j]
- Next
- Next
- $aDirectoryArray[0][0] += $asFileArray[0][0]
- EndIf
- Return $aDirectoryArray
- Case 1
- If $iArrayCount = 1 Then
- ReDim $aDirectoryArray[$iDirectoryIndex + 1]
- Else
- ReDim $aDirectoryArray[$iDirectoryIndex + 1][$iArrayCount]
- EndIf
- Return $aDirectoryArray
- Case 2
- If $iArrayCount = 1 Then
- ReDim $asFileArray[$sFileIndex + 1]
- Else
- ReDim $asFileArray[$sFileIndex + 1][$iArrayCount]
- EndIf
- Return $asFileArray
- EndSwitch
- EndFunc ;==>__FTP_ListToArray
- ; #INTERNAL_USE_ONLY# ===========================================================================================================
- ; Name...........: __FTP_Init
- ; Description ...: DllOpen wininet.dll
- ; Syntax.........: __FTP_Init ( )
- ; Parameters ....:
- ; Return values .:
- ; Author ........:
- ; Modified.......:
- ; Remarks .......:
- ; Related .......:
- ; Link ..........:
- ; Example .......:
- ; ===============================================================================================================================
- Func __FTP_Init()
- $__g_hWinInet_FTP = DllOpen('wininet.dll')
- EndFunc ;==>__FTP_Init
|