mkultra Posted May 15, 2013 Share Posted May 15, 2013 Hello everyone, New guy here asking dopey questions. IM trying to use autoIT to head out to an FTP site and grab just the file with the latest time stamp. Looking through the forum i have a general idea of what i need to do but i have a few questions. 1) do i need to install any third party libraries in order to use ftp in an advanced way. 2) I found the following code but does _FTP_FINDFILELAST locate the file with the last timestamp or just the last file served up #include <FTPEx.au3> Local $server = 'ftp.csx.cam.ac.uk' Local $username = '' Local $pass = '' Local $Open = _FTP_Open('MyFTP Control') Local $Conn = _FTP_Connect($Open, $server, $username, $pass) Local $h_Handle Local $aFile = _FTP_FindFileFirst($Conn, "/pub/software/programming/pcre/", $h_Handle) ConsoleWrite('$Filename = ' & $aFile[10] & ' attribute = ' & $aFile[1] & ' -> Error code: ' & @error & @CRLF) Local $FindClose = _FTP_FindFileClose($h_Handle) Local $Ftpc = _FTP_Close($Open) 3) is FTPex.au3 included in the install. Thanks in advance. Link to comment Share on other sites More sharing options...
joedf Posted May 15, 2013 Share Posted May 15, 2013 FTPex.au3 is in the include folder.. and you may see that all functions have been documented in that file FTPex.au3 expandcollapse popup#include-once #include "WinAPIError.au3" #include "StructureConstants.au3" #include "FileConstants.au3" #include "Date.au3" ; #INDEX# ======================================================================================================================= ; Title .........: FTP ; AutoIt Version : 3.3.7.20++ ; 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 ; Dll(s) ........: wininet.dll ; =============================================================================================================================== ; #VARIABLES# =================================================================================================================== Global $__ghWinInet_FTP = -1 Global $__ghCallback_FTP, $__gbCallback_Set = False ; =============================================================================================================================== ; #CONSTANTS# =================================================================================================================== ;~ Global Const $tagWIN32_FIND_DATA = "DWORD dwFileAttributes; dword ftCreationTime[2]; dword ftLastAccessTime[2]; dword ftLastWriteTime[2]; DWORD nFileSizeHigh; DWORD nFileSizeLow; dword dwReserved0; dword dwReserved1; CHAR cFileName[260]; CHAR cAlternateFileName[14];" 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_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 ;_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 ; =============================================================================================================================== ; #OLD_FUNCTIONS#================================================================================================================ ; Old Function/Name ; --> New Function/Name/Replacement(s) ; ; deprecated functions will no longer work, no parameter change just renaming unless stated ;_FTP_DownloadProgress ; --> _FTP_ProgressDownload ;_FTP_UploadProgress ; --> _FTP_ProgressUpload ;_FTPClose ; --> _FTP_Close ;_FTPCloseFile ; --> _FTP_FileClose ;_FTPCommand ; --> _FTP_Command ;_FTPConnect ; --> _FTP_Connect ;_FTPDelDir ; --> _FTP_DirDelete ;_FTPDelFile ; --> _FTP_FileDelete ;_FTPFileFindClose ; --> _FTP_FindFileClose ; $l_DllStruct suppression ;_FTPFileFindFirst ; --> _FTP_FindFileFirst ; $l_DllStruct suppression ;_FTPFileFindNext ; --> _FTP_FindFileNext ; $l_DllStruct suppression ;_FTPFileSizeLoHi ; --> _FTP_FileSizeLoHi ;_FTPFilesListto2DArray ; --> _FTP_ListToArray2D ;_FTPFilesListtoArray ; --> _FTP_ListToArray ;_FTPFilesListtoArrayEx ; --> _FTP_ListToArrayEx ; $b_Fmt added ;_FTPFileTimeLoHi ; --> _WinAPI_MakeQWord ; parameter inversion ;_FTPFileTimeLoHiToStr ; --> _FTP_FileTimeLoHiToStr ; new optional parameter for type of format ;_FTPGetCurrentDir ; --> _FTP_DirGetCurrent ;_FTPGetFile ; --> _FTP_FileGet ;_FTPGetFileSize ; --> _FTP_FileGetSize ;_FTPMakeDir ; --> _FTP_DirCreate ;_FTPOpen ; --> _FTP_Open ;_FTPOpenFile ; --> _FTP_FileOpen ;_FTPPutFile ; --> _FTP_FilePut ;_FTPPutFolderContents ; --> _FTP_DirPutContents ;_FTPReadFile ; --> _FTP_FileRead ;_FTPRenameFile ; --> _FTP_FileRename ;_FtpSetCurrentDir ; --> _FTP_DirSetCurrent ; =============================================================================================================================== ; #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# ==================================================================================================================== ; Name...........: _FTP_Close ; Description ...: Closes the _FTP_Open session. ; Syntax.........: _FTP_Close($l_InternetSession) ; Parameters ....: $l_InternetSession - as returned by _FTP_Open(). ; Return values .: Success - 1 ; Failure - 0 ; Author ........: Wouter van Kesteren ; Modified.......: Beege ; Remarks .......: ; Related .......: _FTP_Open ; Link ..........: @@MsdnLink@@ InternetCloseHandle ; Example .......: Yes ; =============================================================================================================================== Func _FTP_Close($l_InternetSession) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $l_InternetSession) If @error Or $ai_InternetCloseHandle[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) If $__gbCallback_Set = True Then DllCallbackFree($__ghCallback_FTP) Return $ai_InternetCloseHandle[0] EndFunc ;==>_FTP_Close ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_Command ; Description ...: Sends a command to an FTP server. ; Syntax.........: _FTP_Command($l_FTPSession, $s_FTPCommand[, $l_Flags = 0x00000001[, $l_ExpectResponse = 0[, $l_Context = 0]]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_FTPCommand - Command string to send to FTP Server ; $l_Flags - Optional, $FTP_TRANSFER_TYPE_ASCII or $FTP_TRANSFER_TYPE_BINARY ; $l_ExpectResponse - Optional, Data socket for response in Async mode ; $l_Context - Optional, A pointer to a variable that contains an application-defined ; value used to identify the application context in callback operations ; The $l_ExpectResponse parameter must be set to TRUE for phFtpCommand to be filled. ; -> Parameter removed, is returned as @extended ; Return values .: Success - Returns an identifier. ; Failure - 0 and sets @ERROR ; Author ........: Bill Mezian ; Modified.......: ; Remarks .......: ; Command Examples: depends on server syntax. The following is for ; Binary transfer, ASCII transfer, Passive transfer mode (used with firewalls) ; 'type I' 'type A' 'pasv' ; Related .......: _FTP_Connect ; Link ..........: @@MsdnLink@@ FtpCommand ; Example .......: ; =============================================================================================================================== Func _FTP_Command($l_FTPSession, $s_FTPCommand, $l_Flags = $FTP_TRANSFER_TYPE_ASCII, $l_ExpectResponse = 0, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPCommand = DllCall($__ghWinInet_FTP, 'bool', 'FtpCommandW', 'handle', $l_FTPSession, 'bool', $l_ExpectResponse, 'dword', $l_Flags, 'wstr', $s_FTPCommand, 'dword_ptr', $l_Context, '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# ==================================================================================================================== ; Name...........: _FTP_Connect ; Description ...: Connects to an FTP server. ; Syntax.........: _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password[, $i_Passive = 0[, $i_ServerPort = 0[, $l_Service = 1[, $l_Flags = 0[, $l_Context = 0]]]]]) ; Parameters ....: $l_InternetSession - as returned by_FTP_Open(). ; $s_ServerName - Server name/ip. ; $s_Username - Username. ; $s_Password - Password. ; $i_Passive - Optional, Passive mode. ; $i_ServerPort - Optional, Server port ( 0 is default (21) ) ; $l_Service - Optional, I dont got a clue what this does. ; $l_Flags - Optional, Special flags. ; $l_Context - Optional, I dont got a clue what this does. ; Return values .: Success - Returns an identifier ; Failure - 0 and sets @ERROR ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: _FTP_Open ; Link ..........: @@MsdnLink@@ InternetConnect ; Example .......: Yes ; =============================================================================================================================== Func _FTP_Connect($l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_Passive = 0, $i_ServerPort = 0, $l_Service = $INTERNET_SERVICE_FTP, $l_Flags = 0, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) If $i_Passive == 1 Then $l_Flags = BitOR($l_Flags, $INTERNET_FLAG_PASSIVE) Local $ai_InternetConnect = DllCall($__ghWinInet_FTP, 'hwnd', 'InternetConnectW', 'handle', $l_InternetSession, 'wstr', $s_ServerName, 'ushort', $i_ServerPort, 'wstr', $s_Username, 'wstr', $s_Password, 'dword', $l_Service, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or $ai_InternetConnect[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_InternetConnect[0] EndFunc ;==>_FTP_Connect ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_DecodeInternetStatus ; Description ...: Decode a received Internet Status. ; Syntax.........: _FTP_DecodeInternetStatus($dwInternetStatus) ; Parameters ....: $dwInternetStatus - Internet status. ; Return values .: Returns an string ; Author ........: Beege ; Modified.......: jpm ; Remarks .......: ; Related .......: _FTP_SetStatusCallback ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _FTP_DecodeInternetStatus($dwInternetStatus) Switch $dwInternetStatus 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 = ' & $dwInternetStatus EndSwitch EndFunc ;==>_FTP_DecodeInternetStatus ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_DirCreate ; Description ...: Makes an Directory on an FTP server. ; Syntax.........: _FTP_DirCreate($l_FTPSession, $s_Remote) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_Remote - The Directory to Create. ; Return values .: Success - 1 ; Failure - 0 and sets @ERROR ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: _FTP_Connect ; Link ..........: @@MsdnLink@@ FtpCreateDirectory ; Example .......: ; =============================================================================================================================== Func _FTP_DirCreate($l_FTPSession, $s_Remote) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPMakeDir = DllCall($__ghWinInet_FTP, 'bool', 'FtpCreateDirectoryW', 'handle', $l_FTPSession, 'wstr', $s_Remote) If @error Or $ai_FTPMakeDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPMakeDir[0] EndFunc ;==>_FTP_DirCreate ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_DirDelete ; Description ...: Delete's an Directory on an FTP server. ; Syntax.........: _FTP_DirDelete($l_FTPSession, $s_Remote) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_Remote - The Directory to be deleted. ; Return values .: Success - 1 ; Failure - 0 and sets @ERROR ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: _FTP_Connect ; Link ..........: @@MsdnLink@@ FtpRemoveDirectory ; Example .......: ; =============================================================================================================================== Func _FTP_DirDelete($l_FTPSession, $s_Remote) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPDelDir = DllCall($__ghWinInet_FTP, 'bool', 'FtpRemoveDirectoryW', 'handle', $l_FTPSession, 'wstr', $s_Remote) If @error Or $ai_FTPDelDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPDelDir[0] EndFunc ;==>_FTP_DirDelete ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_DirGetCurrent ; Description ...: Get Current Directory on an FTP server. ; Syntax.........: _FTP_DirGetCurrent($l_FTPSession) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; Return values .: Success - Directory Name ; Failure - 0 and sets @ERROR ; Author ........: Beast ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ FtpGetCurrentDirectory ; Example .......: ; =============================================================================================================================== Func _FTP_DirGetCurrent($l_FTPSession) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPGetCurrentDir = DllCall($__ghWinInet_FTP, 'bool', 'FtpGetCurrentDirectoryW', 'handle', $l_FTPSession, '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# ==================================================================================================================== ; Name...........: _FTP_DirPutContents ; Description ...: Puts an folder on an FTP server. Recursivley if selected. ; Syntax.........: _FTP_DirPutContents($l_InternetSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut) ; Parameters ....: $l_InternetSession - as returned by _FTP_Connect(). ; $s_LocalFolder - The local folder i.e. "c:\temp". ; $s_RemoteFolder - The remote folder i.e. '/website/home'. ; $b_RecursivePut - Recurse through sub-dirs. 0=Non recursive, 1=Recursive ; $l_Context - Optional, see _FTP_Fileopen(). ; Return values .: Success - 1 ; Failure - 0 and sets @ERROR ; Author ........: Stumpii ; Modified.......: ; Remarks .......: ; Related .......: _FTP_Connect ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _FTP_DirPutContents($l_InternetSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut, $l_Context = 0) If StringRight($s_LocalFolder, 1) == "\" Then $s_LocalFolder = StringTrimRight($s_LocalFolder, 1) ; Shows the filenames of all files in the current directory. Local $search = FileFindFirstFile($s_LocalFolder & "\*.*") ; Check if the search was successful If $search = -1 Then Return SetError(1, 0, 0) Local $File While 1 $File = FileFindNextFile($search) If @error Then ExitLoop If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $File), "D") Then _FTP_DirCreate($l_InternetSession, $s_RemoteFolder & "/" & $File) If $b_RecursivePut Then _FTP_DirPutContents($l_InternetSession, $s_LocalFolder & "\" & $File, $s_RemoteFolder & "/" & $File, $b_RecursivePut, $l_Context) EndIf Else _FTP_FilePut($l_InternetSession, $s_LocalFolder & "\" & $File, $s_RemoteFolder & "/" & $File, 0, $l_Context) EndIf WEnd ; Close the search handle FileClose($search) Return 1 EndFunc ;==>_FTP_DirPutContents ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_DirSetCurrent ; Description ...: Set Current Directory on an FTP server. ; Syntax.........: _FTP_DirSetCurrent($l_FTPSession, $s_Remote) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_Remote - The Directory to be set. ; Return values .: Success - 1 ; Failure - 0 and sets @ERROR ; Author ........: Beast ; Modified.......: ; Remarks .......: ; Related .......: _FTP_Connect ; Link ..........: @@MsdnLink@@ FtpSetCurrentDirectory ; Example .......: ; =============================================================================================================================== Func _FTP_DirSetCurrent($l_FTPSession, $s_Remote) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPSetCurrentDir = DllCall($__ghWinInet_FTP, 'bool', 'FtpSetCurrentDirectoryW', 'handle', $l_FTPSession, 'wstr', $s_Remote) If @error Or $ai_FTPSetCurrentDir[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPSetCurrentDir[0] EndFunc ;==>_FTP_DirSetCurrent ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileClose ; Description ...: Closes the Handle returned by _FTP_FileOpen. ; Syntax.........: _FTP_FileClose($l_InternetSession) ; Parameters ....: $l_InternetSession - as returned by _FTP_FileOpen(). ; Return values .: Success - 1 ; Failure - 0 and sets @error =-1 ; Author ........: joeyb1275 ; Modified.......: Prog@ndy ; Remarks .......: found at http://www.autoitscript.com/forum/index.php?s=&showtopic=12473&view=findpost&p=331340 ; Related .......: ; Link ..........: @@MsdnLink@@ InternetCloseHandle ; Example .......: ; =============================================================================================================================== Func _FTP_FileClose($l_InternetSession) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $l_InternetSession) If @error Or $ai_InternetCloseHandle[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_InternetCloseHandle[0] EndFunc ;==>_FTP_FileClose ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileDelete ; Description ...: Delete an file from an FTP server. ; Syntax.........: _FTP_FileDelete($l_FTPSession, $s_RemoteFile) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_RemoteFile - The remote Location for the file. ; Return values .: Success - 1 ; Failure - 0 and sets @ERROR ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ FtpDeleteFile ; Example .......: ; =============================================================================================================================== Func _FTP_FileDelete($l_FTPSession, $s_RemoteFile) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPPutFile = DllCall($__ghWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile) If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPPutFile[0] EndFunc ;==>_FTP_FileDelete ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileGet ; Description ...: Get file from a FTP server. ; Syntax.........: _FTP_FileGet($l_FTPSession, $s_RemoteFile, $s_LocalFile[, $fFailIfExists = False,[ $dwFlagsAndAttributes = 0[, $l_Flags = 0[, $l_Context = 0]]]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_RemoteFile - The remote Location for the file. ; $s_LocalFile - The local file. ; $fFailIfExists - Optional, True: do not overwrite existing (default = False) ; $dwFlagsAndAttributes - Optional, File attributes for the new file. ; $l_Flags - Optional, as in _FTP_FileOpen(). ; $l_Context - Optional, (Not Used) in case someone can use it. ; Return values .: Success - 1 ; Failure - 0 and sets @ERROR ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ FtpGetFile ; Example .......: ; =============================================================================================================================== Func _FTP_FileGet($l_FTPSession, $s_RemoteFile, $s_LocalFile, $fFailIfExists = False, $dwFlagsAndAttributes = 0, $l_Flags = $FTP_TRANSFER_TYPE_UNKNOWN, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPGetFile = DllCall($__ghWinInet_FTP, 'bool', 'FtpGetFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile, 'wstr', $s_LocalFile, 'bool', $fFailIfExists, 'dword', $dwFlagsAndAttributes, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or $ai_FTPGetFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPGetFile[0] EndFunc ;==>_FTP_FileGet ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileGetSize ; Description ...: Gets filesize of a file on the FTP server. ; Syntax.........: _FTP_FileGetSize($l_FTPSession, $s_FileName) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_FileName - The file name. ; Return values .: Success - returns filesize as an uint64 ; Failure - sets @error non-zero ; Author ........: Joachim de Koning ; Modified.......: jpm ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ FtpGetFileSize ; Example .......: Yes ; =============================================================================================================================== Func _FTP_FileGetSize($l_FTPSession, $s_FileName) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPGetSizeHandle = DllCall($__ghWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $l_FTPSession, 'wstr', $s_FileName, '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($__ghWinInet_FTP, 'dword', 'FtpGetFileSize', 'handle', $ai_FTPGetSizeHandle[0], 'dword*', 0) If @error Or $ai_FTPGetFileSize[0] = 0 Then Local $lasterror = _WinAPI_GetLastError() DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_FTPGetSizeHandle[0]) ; No need to test @error. Return SetError(-1, $lasterror, 0) EndIf DllCall($__ghWinInet_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# ==================================================================================================================== ; Name...........: _FTP_FileOpen ; Description ...: Initiates access to a remote file on an FTP server for reading or writing. ; Syntax.........: _FTP_FileOpen($hConnect, $lpszFileName[, $dwAccess = 0x80000000[, $dwFlags = 2[, $dwContext = 0]]]) ; Parameters ....: $hConnect - as returned by _FTP_Connect(). ; $lpszFileName - String of the ftp file to open. ; $dwAccess - Optional, GENERIC_READ or GENERIC_WRITE (Default is GENERIC_READ). ; $dwFlags - Optional, Settings for the transfer see notes below (Default is 2 for FTP_TRANSFER_TYPE_BINARY). ; $dwContext - Optional, (Not Used) See notes below. ; Return values .: Success - Returns the handle to ftp file for read with _FTP_FileRead() ; Failure - 0 and sets @error to non-zero ; Author ........: joeyb1275 ; Modified.......: Prog@ndy ; Remarks .......: found at http://www.autoitscript.com/forum/index.php?s=&showtopic=12473&view=findpost&p=331340 ;~ dwFlags ;~ [in] Conditions under which the transfers occur. The application should select one transfer type and any of ;~ the flags that indicate how the caching of the file will be controlled. ;~ The transfer type can be one of the following values. ;~ FTP_TRANSFER_TYPE_ASCII Transfers the file using FTP's ASCII (Type A) transfer method. Control and ;~ formatting information is converted to local equivalents. ;~ FTP_TRANSFER_TYPE_BINARY Transfers the file using FTP's Image (Type I) transfer method. The file is ;~ transferred exactly as it exists with no changes. This is the default transfer method. ;~ FTP_TRANSFER_TYPE_UNKNOWN Defaults to FTP_TRANSFER_TYPE_BINARY. ;~ INTERNET_FLAG_TRANSFER_ASCII Transfers the file as ASCII. ;~ INTERNET_FLAG_TRANSFER_BINARY Transfers the file as binary. ;~ The following values are used to control the caching of the file. The application can use one or more of these values. ;~ INTERNET_FLAG_HYPERLINK Forces a reload if there was no Expires time and no LastModified time returned from the server ;~ when determining whether to reload the item from the network. ;~ INTERNET_FLAG_NEED_FILE Causes a temporary file to be created if the file cannot be cached. ;~ INTERNET_FLAG_RELOAD Forces a download of the requested file, object, or directory listing from the origin server, ;~ not from the cache. ;~ INTERNET_FLAG_RESYNCHRONIZE Reloads HTTP resources if the resource has been modified since the last time it was ;~ downloaded. All FTP and Gopher resources are reloaded. ;~ dwContext ;~ [in] Pointer to a variable that contains the application-defined value that associates this search with any ;~ application data. This is only used if the application has already called _FTP_SetStatusCallback() to set ;~ up a status callback function. ; Related .......: _FTP_FileRead ; Link ..........: @@MsdnLink@@ FtpOpenFile ; Example .......: ; =============================================================================================================================== Func _FTP_FileOpen($hConnect, $lpszFileName, $dwAccess = $GENERIC_READ, $dwFlags = $INTERNET_FLAG_TRANSFER_BINARY, $dwContext = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_ftpopenfile = DllCall($__ghWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $hConnect, 'wstr', $lpszFileName, 'dword', $dwAccess, 'dword', $dwFlags, 'dword_ptr', $dwContext) If @error Or $ai_ftpopenfile[0] == 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_ftpopenfile[0] EndFunc ;==>_FTP_FileOpen ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FilePut ; Description ...: Puts an file on an FTP server. ; Syntax.........: _FTP_FilePut($l_FTPSession, $s_LocalFile, $s_RemoteFile[, $l_Flags = 0[, $l_Context = 0]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_LocalFile - The local file. ; $s_RemoteFile - The remote Location for the file. ; $l_Flags - Optional, as in _FTP_FileOpen(). ; $l_Context - Optional, (Not Used) in case someone can use it. ; Return values .: Success - 1 ; Failure - 0 and sets @error to non-zero ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ FtpPutFile ; Example .......: ; =============================================================================================================================== Func _FTP_FilePut($l_FTPSession, $s_LocalFile, $s_RemoteFile, $l_Flags = 0, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPPutFile = DllCall($__ghWinInet_FTP, 'bool', 'FtpPutFileW', 'handle', $l_FTPSession, 'wstr', $s_LocalFile, 'wstr', $s_RemoteFile, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPPutFile[0] EndFunc ;==>_FTP_FilePut ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileRead ; Description ...: Reads data from a handle opened by _FTP_FileOpen() ; Syntax.........: _FTP_FileRead($h_File, $dwNumberOfBytesToRead) ; Parameters ....: $h_File - Handle returned by _FTP_FileOpen() to the ftp file. ; $dwNumberOfBytesToRead - Number of bytes to read. ; Return values .: Success - Returns the binary/string read. ; Failure - 0 and Sets @error = -1 for end-of-file, @error to non-zero for other errors. ; Author ........: joeyb1275 ; Modified.......: Prog@ndy ; Remarks .......: found at http://www.autoitscript.com/forum/index.php?s=&showtopic=12473&view=findpost&p=331340 ; Related .......: ; Link ..........: @@MsdnLink@@ InternetReadFile ; Example .......: ; =============================================================================================================================== Func _FTP_FileRead($h_File, $dwNumberOfBytesToRead) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $lpBuffer = DllStructCreate("byte[" & $dwNumberOfBytesToRead & "]") Local $ai_FTPReadFile = DllCall($__ghWinInet_FTP, 'bool', 'InternetReadFile', 'handle', $h_File, 'struct*', $lpBuffer, 'dword', $dwNumberOfBytesToRead, 'dword*', 0) ;LPDWORD lpdwNumberOfBytesRead If @error Then Return SetError(1, _WinAPI_GetLastError(), 0) Local $lpdwNumberOfBytesRead = $ai_FTPReadFile[4] If $lpdwNumberOfBytesRead == 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 $dwNumberOfBytesToRead > $lpdwNumberOfBytesRead Then $s_FileRead = BinaryMid(DllStructGetData($lpBuffer, 1), 1, $lpdwNumberOfBytesRead) ;index is omitted so the entire array is written into $s_FileRead as a BinaryString Else $s_FileRead = DllStructGetData($lpBuffer, 1) ;index is omitted so the entire array is written into $s_FileRead as a BinaryString EndIf Return SetError(0, $lpdwNumberOfBytesRead, $s_FileRead) EndFunc ;==>_FTP_FileRead ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileRename ; Description ...: Renames an file on an FTP server. ; Syntax.........: _FTP_FileRename($l_FTPSession, $s_Existing, $s_New) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_Existing - The old file name. ; $s_New - The new file name. ; Return values .: Success - 1 ; Failure - 0 and sets @error to non-zero ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ FtpRenameFile ; Example .......: ; =============================================================================================================================== Func _FTP_FileRename($l_FTPSession, $s_Existing, $s_New) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPRenameFile = DllCall($__ghWinInet_FTP, 'bool', 'FtpRenameFileW', 'handle', $l_FTPSession, 'wstr', $s_Existing, 'wstr', $s_New) If @error Or $ai_FTPRenameFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_FTPRenameFile[0] EndFunc ;==>_FTP_FileRename ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FileTimeLoHiToStr ; Description ...: Get FileDateTime String ; Syntax.........: _FTP_FileTimeLoHiToStr($LoDWORD, $HiDWORD[, $bFmt = 0]) ; Parameters ....: $LoDWORD - FileTime Low ; $HiDWORD - File Time Hi ; $bFmt - Optional, 0 returns mm/dd/yyyy hh:mm:ss (Default) ; |1 returns yyyy/mm/dd hh:mm:ss ; Return values .: Success - DateTime according to $bFmt ; Failure - "" (empty String) ; Author ........: Prog@ndy ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _FTP_FileTimeLoHiToStr($LoDWORD, $HiDWORD, $bFmt = 0) Local $tFileTime = DllStructCreate($tagFILETIME) If Not $LoDWORD And Not $HiDWORD Then Return SetError(1, 0, "") DllStructSetData($tFileTime, 1, $LoDWORD) DllStructSetData($tFileTime, 2, $HiDWORD) Local $date = _Date_Time_FileTimeToStr($tFileTime, $bFmt) Return SetError(@error, @extended, $date) EndFunc ;==>_FTP_FileTimeLoHiToStr ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FindFileClose ; Description ...: Delete FindFile Handle. ; Syntax.........: _FTP_FindFileClose($h_Handle) ; Parameters ....: $h_Handle - Handle as return by _FTP_FindFileFirst(). ; Return values .: Success - 1 ; Failure - 0 and sets @error to non-zero ; Author ........: Dick Bronsdijk ; Modified.......: Prog@ndy, jpm ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ InternetCloseHandle ; Example .......: Yes ; =============================================================================================================================== Func _FTP_FindFileClose($h_Handle) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $ai_FTPPutFile = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $h_Handle) If @error Or $ai_FTPPutFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), "") Return $ai_FTPPutFile[0] EndFunc ;==>_FTP_FindFileClose ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FindFileFirst ; Description ...: Find First File on an FTP server. ; Syntax.........: _FTP_FindFileFirst($l_FTPSession, $s_RemotePath, ByRef $h_Handle[, $l_Flags = 0[, $l_Context = 0]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_RemotePath - path to be used when searching the file. ; $h_Handle - returns Handle to be used in _FTP_FindFileNext() or _FTP_FindFileClose(). ; $l_Flags - see remarks. ; $l_Context - (Not Used) in case someone can use it. ; Return values .: Success - an array, see remarks. ; Failure - 0 and sets @ERROR ; Author ........: Dick Bronsdijk ; Modified.......: Prog@ndy, jpm ; Remarks .......: If successfull a return array: ; [0] - Number of elements ; [1] - File Attributes ; [2] - Creation Time Low ; [3] - Creation Time Hi ; [4] - Access Time Low ; [5] - Access Time Hi ; [6] - Last Write Low ; [7] - Last Write Hi ; [8] - File Size High ; [9] - File Size Low ; [10] - File Name ; [11] - Altername ; $l_Flags can be a combination of $INTERNET_FLAG_HYPERLINK, $INTERNET_FLAG_NEED_FILE, $INTERNET_FLAG_NO_CACHE_WRITE, $INTERNET_FLAG_RELOAD, $INTERNET_FLAG_RESYNCHRONIZE ; Related .......: _FTP_FindFileNext, _FTP_FindFileClose ; Link ..........: @@MsdnLink@@ FtpFindFirstFile ; Example .......: Yes ; =============================================================================================================================== Func _FTP_FindFileFirst($l_FTPSession, $s_RemotePath, ByRef $h_Handle, $l_Flags = 0, $l_Context = 0) ;flags = 0 changed to $INTERNET_FLAG_TRANSFER_BINARY to see if stops hanging If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $l_DllStruct = DllStructCreate($tagWIN32_FIND_DATA) If @error Then Return SetError(-3, 0, "") Local $a_FTPFileList[1] $a_FTPFileList[0] = 0 Local $ai_FTPFirstFile = DllCall($__ghWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $l_FTPSession, 'wstr', $s_RemotePath, 'struct*', $l_DllStruct, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or $ai_FTPFirstFile[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), $ai_FTPFirstFile) $h_Handle = $ai_FTPFirstFile[0] Local $a_FTPFileList[12] $a_FTPFileList[0] = 11 $a_FTPFileList[1] = DllStructGetData($l_DllStruct, "dwFileAttributes") $a_FTPFileList[2] = DllStructGetData($l_DllStruct, "ftCreationTime", 1) $a_FTPFileList[3] = DllStructGetData($l_DllStruct, "ftCreationTime", 2) $a_FTPFileList[4] = DllStructGetData($l_DllStruct, "ftLastAccessTime", 1) $a_FTPFileList[5] = DllStructGetData($l_DllStruct, "ftLastAccessTime", 2) $a_FTPFileList[6] = DllStructGetData($l_DllStruct, "ftLastWriteTime", 1) $a_FTPFileList[7] = DllStructGetData($l_DllStruct, "ftLastWriteTime", 2) $a_FTPFileList[8] = DllStructGetData($l_DllStruct, "nFileSizeHigh") $a_FTPFileList[9] = DllStructGetData($l_DllStruct, "nFileSizeLow") $a_FTPFileList[10] = DllStructGetData($l_DllStruct, "cFileName") $a_FTPFileList[11] = DllStructGetData($l_DllStruct, "cAlternateFileName") Return $a_FTPFileList EndFunc ;==>_FTP_FindFileFirst ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_FindFileNext ; Description ...: Find Next File on an FTP server. ; Syntax.........: _FTP_FindFileNext($h_Handle) ; Parameters ....: $h_Handle - as returned by _FTP_FindFileFirst(). ; Return values .: Success - an array, see remarks. ; Failure - 0 and sets @ERROR ; Author ........: Dick Bronsdijk ; Modified.......: Prog@ndy, jpm ; Remarks .......: If successfull a return array: ; [0] - Number of elements ; [1] - File Attributes ; [2] - Creation Time Low ; [3] - Creation Time Hi ; [4] - Access Time Low ; [5] - Access Time Hi ; [6] - Last Write Low ; [7] - Last Write Hi ; [8] - File Size High ; [9] - File Size Low ; [10] - File Name ; [11] - Altername ; Related .......: _FTP_FindFileFirst, _FTP_FindFileClose ; Link ..........: @@MsdnLink@@ InternetFindNextFile ; Example .......: Yes ; =============================================================================================================================== Func _FTP_FindFileNext($h_Handle) Local $l_DllStruct = DllStructCreate($tagWIN32_FIND_DATA) Local $a_FTPFileList[1] $a_FTPFileList[0] = 0 Local $ai_FTPPutFile = DllCall($__ghWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $h_Handle, 'struct*', $l_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($l_DllStruct, "dwFileAttributes") $a_FTPFileList[2] = DllStructGetData($l_DllStruct, "ftCreationTime", 1) $a_FTPFileList[3] = DllStructGetData($l_DllStruct, "ftCreationTime", 2) $a_FTPFileList[4] = DllStructGetData($l_DllStruct, "ftLastAccessTime", 1) $a_FTPFileList[5] = DllStructGetData($l_DllStruct, "ftLastAccessTime", 2) $a_FTPFileList[6] = DllStructGetData($l_DllStruct, "ftLastWriteTime", 1) $a_FTPFileList[7] = DllStructGetData($l_DllStruct, "ftLastWriteTime", 2) $a_FTPFileList[8] = DllStructGetData($l_DllStruct, "nFileSizeHigh") $a_FTPFileList[9] = DllStructGetData($l_DllStruct, "nFileSizeLow") $a_FTPFileList[10] = DllStructGetData($l_DllStruct, "cFileName") $a_FTPFileList[11] = DllStructGetData($l_DllStruct, "cAlternateFileName") Return $a_FTPFileList EndFunc ;==>_FTP_FindFileNext ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_GetLastResponseInfo ; Description ...: Retrieves the last error description or server response on the thread calling this function. ; Syntax.........: _FTP_ListToArray(ByRef $dwError, ByRef $szMessage) ; Parameters ....: $dwError - returns an error message pertaining to the operation that failed. ; $szMessage - returns the error text. ; Return values .: Success - 1 ; Failure - 0 and set @error ; Author ........: jpm ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: @@MsdnLink@@ InternetGetLastResponseInfo ; Example .......: ; =============================================================================================================================== Func _FTP_GetLastResponseInfo(ByRef $dwError, ByRef $szMessage) Local $ai_LastResponseInfo = DllCall($__ghWinInet_FTP, 'bool', 'InternetGetLastResponseInfoW', 'dword*', 0, 'wstr', "", 'dword*', 4096) If @error Or $ai_LastResponseInfo[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) $dwError = $ai_LastResponseInfo[1] $szMessage = $ai_LastResponseInfo[2] Return $ai_LastResponseInfo[0] EndFunc ;==>_FTP_GetLastResponseInfo ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_ListToArray ; Description ...: Get Filenames, Directories or Both of current remote directory. ; Syntax.........: _FTP_ListToArray($l_FTPSession[, $Return_Type = 0, $l_Flags = 0]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $Return_type - Optional, 0 = Both Files and Directories, 1 = Directories, 2 = Files. ; $l_Flags - Optional, see _FTP_FindFileFirst(). ; $l_Context - Optional, see _FTP_Fileopen(). ; Return values .: Success - An array containing the names. Array[0] contain the number of found entries. ; Failure - Array[0] = 0 ; Author ........: Beast, Prog@ndy ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _FTP_ListToArray($l_FTPSession, $Return_Type = 0, $l_Flags = 0, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Return __FTP_ListToArray($l_FTPSession, $Return_Type, $l_Flags, 0, 1, $l_Context) EndFunc ;==>_FTP_ListToArray ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_ListToArray2D ; Description ...: Get Filenames and filesizes of current remote directory. ; Syntax.........: _FTP_ListToArray2D($l_FTPSession[, $Return_Type = 0[, $l_Flags = 0]]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $Return_Type - Optional, 0 = Both Files and Directories, 1 = Directories, 2 = Files. ; $l_Flags - Optional, see _FTP_FindFileFirst(). ; $l_Context - Optional, see _FTP_Fileopen(). ; Return values .: Success - 2D Array with names and size. Array[0][0] contain the number of found entries. ; Failure - Array[0][0] = 0 ; Author ........: Prog@ndy ; Modified.......: jpm ; Remarks .......: Array[0][0] = number of found entries ; ; Array[x][0] Filename ; Array[x][1] Filesize ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _FTP_ListToArray2D($l_FTPSession, $Return_Type = 0, $l_Flags = 0, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Return __FTP_ListToArray($l_FTPSession, $Return_Type, $l_Flags, 0, 2, $l_Context) EndFunc ;==>_FTP_ListToArray2D ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_ListToArrayEx ; Description ...: Get names, sizes, attributes aand times of files/dir of current remote directory. ; Syntax.........: _FTP_ListToArrayEx($l_FTPSession[, $Return_Type = 0[, $l_Flags = 0[, $b_Fmt = 1]]]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $Return_type - Optional, 0 = Both Files and Directories, 1 = Directories, 2 = Files. ; $l_Flags - Optional, see _FTP_FindFileFirst(). ; $b_Fmt - Optional, type on the date strings : 1 = yyyy/mm/dd, 0 = mm/dd/yyyy. ; $l_Context - Optional, see _FTP_Fileopen(). ; Return values .: Success - returns a 2D Array, see remarks. ; Failure - Array[0][0] = 0. ; Author ........: Beast, Prog@ndy ; Modified.......: jpm ; Remarks .......: Array[0][0] = number of found entries ; ; Array[x][0] Filename ; Array[x][1] Filesize ; Array[x][2] FileAttribute ; Array[x][3] File Modification datetime ; Array[x][4] File Creation datetime ; Array[x][5] File Access datetime ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _FTP_ListToArrayEx($l_FTPSession, $Return_Type = 0, $l_Flags = 0, $b_Fmt = 1, $l_Context = 0) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Return __FTP_ListToArray($l_FTPSession, $Return_Type, $l_Flags, $b_Fmt, 6, $l_Context) EndFunc ;==>_FTP_ListToArrayEx ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_Open ; Description ...: Opens an FTP session. ; Syntax.........: _FTP_Open($s_Agent[, $l_AccessType = 1[, $s_ProxyName = ''[, $s_ProxyBypass = ''[, $l_Flags = 0]]]] ) ; Parameters ....: $s_Agent - Random name. ( like "myftp" ). ; $l_AccessType - Set if proxy is used. ; $s_ProxyName - ProxyName. ; $s_ProxyBypass - ProxyByPasses's. ; $l_Flags - See remarks. ; Return values .: Success - Handle to internet session to be used in _FTP_Connect(). ; Failure - 0 and sets @ERROR ; Author ........: Wouter van Kesteren ; Modified.......: ; Remarks .......: Values for $l_AccessType ; $INTERNET_OPEN_TYPE_DIRECT -> no proxy ; $INTERNET_OPEN_TYPE_PRECONFIG -> Retrieves the proxy ; or direct configuration from the registry. ; $INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY ; -> Retrieves the proxy or direct configuration ; from the registry and prevents the use of a ; startup Microsoft JScript or Internet Setup (INS) file. ; $INTERNET_OPEN_TYPE_PROXY -> Passes requests to the ; proxy unless a proxy bypass list is supplied ; and the name to be resolved bypasses the proxy. ; Then no proxy is used. ; Values for $l_Flags ; $INTERNET_FLAG_ASYNC -> Makes only asynchronous requests on handles descended ; from the handle returned from this function. ; $INTERNET_FLAG_FROM_CACHE -> Does not make network requests. ; All entities are returned from the cache. ; If the requested item is not in the cache, a suitable error, ; such as ERROR_FILE_NOT_FOUND, is returned. ; Related .......: ; Link ..........: @@MsdnLink@@ InternetOpen ; Example .......: Yes ; =============================================================================================================================== Func _FTP_Open($s_Agent, $l_AccessType = $INTERNET_OPEN_TYPE_DIRECT, $s_ProxyName = '', $s_ProxyBypass = '', $l_Flags = 0) If $__ghWinInet_FTP = -1 Then __FTP_Init() Local $ai_InternetOpen = DllCall($__ghWinInet_FTP, 'handle', 'InternetOpenW', 'wstr', $s_Agent, 'dword', $l_AccessType, _ 'wstr', $s_ProxyName, 'wstr', $s_ProxyBypass, 'dword', $l_Flags) If @error Or $ai_InternetOpen[0] = 0 Then Return SetError(-1, _WinAPI_GetLastError(), 0) Return $ai_InternetOpen[0] EndFunc ;==>_FTP_Open ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_ProgressDownload ; Description ...: Downloads a file in Binary Mode and shows a Progress window or by Calling a User defined Function. ; Syntax.........: _FTP_ProgressDownload($l_FTPSession, $s_LocalFile, $s_RemoteFile[, $FunctionToCall = ""]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_LocalFile - The local file to create. ; $s_RemoteFile - The remote source file. ; $FunctionToCall - [Optional] A function which can update a Progressbar and ; react on UserInput like Click on Abort or Close App. ; (More info in the end of this comment) ; Return values .: Success - 1 ; Error: 0 and @error: ; -1 -> Local file couldn't be created ; -2 -> Unable to get RemoteFile size ; -3 -> Open RemoteFile failed ; -4 -> Read from Remotefile failed ; -5 -> Close RemoteFile failed ; -6 -> Download aborted by PercentageFunc, Return of Called Function ; -7 -> Local file write failed ; Author ........: limette, Prog@ndy ; Modified.......: jchd ; Remarks .......: ; Information about $FunctionToCall: ; Parameter: $Percentage - The Percentage of Progress ; Return Values: Continue Download - 1 ; Abort Download - 0 Or negative ; These Return Values are returned by _FTP_ProgressDownload(), too, ; so you can react on different Actions like Aborting by User, closing App or TimeOut of whatever ;~ Examples: ;~ Func _UpdateProgress($Percentage) ;~ ProgressSet($percent,$percent &"%") ;~ If _IsPressed("77") Then Return 0 ; Abort on F8 ;~ Return 1 ; bei 1 Fortsetzten ;~ Endfunc ; ;~ Func _UpdateProgress($Percentage) ;~ GUICtrlSetData($ProgressBarCtrl,$percent) ;~ Switch GUIGetMsg() ;~ Case $GUI_EVENT_CLOSE ;~ Return -1 ; _FTP_DownloadProgress Aborts with -1, so you can exit you app afterwards ;~ Case $Btn_Cancel ;~ Return 0 ; Just Cancel, without special Return value ;~ EndSwitch ;~ Return 1 ; Otherwise contine Download ;~ Endfunc ; Related .......: ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _FTP_ProgressDownload($l_FTPSession, $s_LocalFile, $s_RemoteFile, $FunctionToCall = "") If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $fhandle = FileOpen($s_LocalFile, 18) If $fhandle < 0 Then Return SetError(-1, 0, 0) Local $ai_ftpopenfile = DllCall($__ghWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile, '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($__ghWinInet_FTP, 'dword', 'FtpGetFileSize', 'handle', $ai_ftpopenfile[0], 'dword*', 0) If @error Then Return SetError(-2, _WinAPI_GetLastError(), 0) If $FunctionToCall = "" Then ProgressOn("FTP Download", "Downloading " & $s_LocalFile) Local $glen = _WinAPI_MakeQWord($ai_FTPGetFileSize[0], $ai_FTPGetFileSize[2]) ;FileGetSize($s_RemoteFile) Local Const $ChunkSize = 256 * 1024 Local $last = Mod($glen, $ChunkSize) Local $parts = Ceiling($glen / $ChunkSize) Local $buffer = DllStructCreate("byte[" & $ChunkSize & "]") Local $ai_InternetCloseHandle, $ai_FTPread, $out, $ret, $lasterror Local $x = $ChunkSize Local $done = 0 For $i = 1 To $parts If $i = $parts And $last > 0 Then $x = $last EndIf $ai_FTPread = DllCall($__ghWinInet_FTP, 'bool', 'InternetReadFile', 'handle', $ai_ftpopenfile[0], 'struct*', $buffer, 'dword', $x, 'dword*', $out) If @error Or $ai_FTPread[0] = 0 Then $lasterror = _WinAPI_GetLastError() $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) ; No need to test @error. FileClose($fhandle) If $FunctionToCall = "" Then ProgressOff() Return SetError(-4, $lasterror, 0) EndIf $ret = FileWrite($fhandle, BinaryMid(DllStructGetData($buffer, 1), 1, $ai_FTPread[4])) If Not $ret Then $lasterror = _WinAPI_GetLastError() $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) ; No need to test @error. FileClose($fhandle) FileDelete($s_LocalFile) If $FunctionToCall = "" Then ProgressOff() Return SetError(-7, $lasterror, 0) EndIf $done += $ai_FTPread[4] If $FunctionToCall = "" Then ProgressSet(($done / $glen) * 100) Else $ret = Call($FunctionToCall, ($done / $glen) * 100) If $ret <= 0 Then $lasterror = @error $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) ; No need to test @error. FileClose($fhandle) FileDelete($s_LocalFile) If $FunctionToCall = "" Then ProgressOff() Return SetError(-6, $lasterror, $ret) EndIf EndIf Sleep(10) Next FileClose($fhandle) If $FunctionToCall = "" Then ProgressOff() $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) If @error Or $ai_InternetCloseHandle[0] = 0 Then Return SetError(-5, _WinAPI_GetLastError(), 0) EndIf Return 1 EndFunc ;==>_FTP_ProgressDownload ; #FUNCTION# ==================================================================================================================== ; Name...........: _FTP_ProgressUpload ; Description ...: Uploads a file in Binary Mode and shows a Progress window or by Calling a User defined Function. ; Syntax.........: _FTP_ProgressUpload($l_FTPSession, $s_LocalFile, $s_RemoteFile[, $FunctionToCall = ""]) ; Parameters ....: $l_FTPSession - as returned by _FTP_Connect(). ; $s_LocalFile - The local file. ; $s_RemoteFile - The remote Location for the file. ; $FunctionToCall - [Optional] A function which can update a Progressbar and ; react on UserInput like Click on Abort or Close App. ; (More info in the end of this comment) ; Return values .: Success: 1 ; Error: 0 and @error: ; -1 -> Local file couldn't be opened ; -3 -> Create File failed ; -4 -> Write to file failed ; -5 -> Close File failed ; -6 -> Download aborted by PercentageFunc, Return of Called Function ; Author ........: limette, Prog@ndy ; Modified.......: jchd ; Remarks .......: ; Information about $FunctionToCall: ; Parameter: $Percentage - The Percentage of Progress ; Return Values: Continue Download - 1 ; Abort Download - 0 Or negative ; These Return Values are returned by _FTP_UploadProgress, too, ; so you can react on different Actions like Aborting by User, closing App or TimeOut of whatever ;~ Examples: ;~ Func _UpdateProgress($Percentage) ;~ ProgressSet($percent,$percent &"%") ;~ If _IsPressed("77") Then Return 0 ; Abort on F8 ;~ Return 1 ; bei 1 Fortsetzten ;~ Endfunc ; ;~ Func _UpdateProgress($Percentage) ;~ GUICtrlSetData($ProgressBarCtrl,$percent) ;~ Switch GUIGetMsg() ;~ Case $GUI_EVENT_CLOSE ;~ Return -1 ; _FTP_UploadProgress Aborts with -1, so you can exit you app afterwards ;~ Case $Btn_Cancel ;~ Return 0 ; Just Cancel, without special Return value ;~ EndSwitch ;~ Return 1 ; Otherwise contine Upload ;~ Endfunc ; Related .......: ; Link ..........: @@MsdnLink@@ FtpOpenFile ; Example .......: ; =============================================================================================================================== Func _FTP_ProgressUpload($l_FTPSession, $s_LocalFile, $s_RemoteFile, $FunctionToCall = "") If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $fhandle = FileOpen($s_LocalFile, 16) If @error Then Return SetError(-1, _WinAPI_GetLastError(), 0) Local $ai_ftpopenfile = DllCall($__ghWinInet_FTP, 'handle', 'FtpOpenFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile, '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 $FunctionToCall = "" Then ProgressOn("FTP Upload", "Uploading " & $s_LocalFile) Local $glen = FileGetSize($s_LocalFile) Local Const $ChunkSize = 256 * 1024 Local $last = Mod($glen, $ChunkSize) Local $parts = Ceiling($glen / $ChunkSize) Local $buffer = DllStructCreate("byte[" & $ChunkSize & "]") Local $ai_InternetCloseHandle, $ai_ftpwrite, $out, $ret, $lasterror Local $x = $ChunkSize Local $done = 0 For $i = 1 To $parts If $i = $parts And $last > 0 Then $x = $last EndIf DllStructSetData($buffer, 1, FileRead($fhandle, $x)) $ai_ftpwrite = DllCall($__ghWinInet_FTP, 'bool', 'InternetWriteFile', 'handle', $ai_ftpopenfile[0], 'struct*', $buffer, 'dword', $x, 'dword*', $out) If @error Or $ai_ftpwrite[0] = 0 Then $lasterror = _WinAPI_GetLastError() $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) ; No need to test @error. FileClose($fhandle) If $FunctionToCall = "" Then ProgressOff() Return SetError(-4, $lasterror, 0) EndIf $done += $x If $FunctionToCall = "" Then ProgressSet(($done / $glen) * 100) Else $ret = Call($FunctionToCall, ($done / $glen) * 100) If $ret <= 0 Then $lasterror = @error $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) ; No need to test @error. DllCall($__ghWinInet_FTP, 'bool', 'FtpDeleteFileW', 'handle', $l_FTPSession, 'wstr', $s_RemoteFile) ; No need to test @error. FileClose($fhandle) If $FunctionToCall = "" Then ProgressOff() Return SetError(-6, $lasterror, $ret) EndIf EndIf Sleep(10) Next FileClose($fhandle) If $FunctionToCall = "" Then ProgressOff() $ai_InternetCloseHandle = DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $ai_ftpopenfile[0]) ; No need to test @error. If @error Or $ai_InternetCloseHandle[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($l_InternetSession, $sFunctionName) ; Parameters ....: $l_InternetSession - 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($l_InternetSession, $sFunctionName) If $__ghWinInet_FTP = -1 Then Return SetError(-2, 0, 0) Local $CallBack_Register = DllCallbackRegister($sFunctionName, "none", "ptr;ptr;dword;ptr;dword") If Not $CallBack_Register Then Return SetError(-1, 0, 0) Local $ah_CallBackFunction = DllCall('wininet.dll', "ptr", "InternetSetStatusCallback", "ptr", $l_InternetSession, "ulong_ptr", DllCallbackGetPtr($CallBack_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 $__gbCallback_Set = True $__ghCallback_FTP = $CallBack_Register Return $ah_CallBackFunction[1] EndFunc ;==>_FTP_SetStatusCallback ; #INTERNAL_USE_ONLY# =========================================================================================================== ; Name...........: __FTP_ListToArray ; Description ...: ; Syntax.........: __FTP_ListToArray($l_FTPSession, $Return_Type = 0, $l_Flags = 0, $bFmt = 1, $ArrayCount = 6) ; Parameters ....: ; Return values .: an 2D array with the requested info defined by $ArrayCount ; [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($l_FTPSession, $Return_Type = 0, $l_Flags = 0, $bFmt = 1, $ArrayCount = 6, $l_Context = 0) Local $tWIN32_FIND_DATA, $tFileTime, $IsDir, $callFindNext Local $DirectoryIndex = 0, $FileIndex = 0 If $ArrayCount = 1 Then Local $FileArray[1], $DirectoryArray[1] Else Local $FileArray[1][$ArrayCount], $DirectoryArray[1][$ArrayCount] EndIf If $Return_Type < 0 Or $Return_Type > 2 Then Return SetError(1, 0, $FileArray) ;~ 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];" $tWIN32_FIND_DATA = DllStructCreate($tagWIN32_FIND_DATA) Local $callFindFirst = DllCall($__ghWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $l_FTPSession, 'wstr', "", 'struct*', $tWIN32_FIND_DATA, 'dword', $l_Flags, 'dword_ptr', $l_Context) If @error Or Not $callFindFirst[0] Then Return SetError(1, _WinAPI_GetLastError(), 0) Do $IsDir = BitAND(DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes"), $FILE_ATTRIBUTE_DIRECTORY) = $FILE_ATTRIBUTE_DIRECTORY If $IsDir And ($Return_Type <> 2) Then $DirectoryIndex += 1 If $ArrayCount = 1 Then If UBound($DirectoryArray) < $DirectoryIndex + 1 Then ReDim $DirectoryArray[$DirectoryIndex * 2] $DirectoryArray[$DirectoryIndex] = DllStructGetData($tWIN32_FIND_DATA, "cFileName") Else If UBound($DirectoryArray) < $DirectoryIndex + 1 Then ReDim $DirectoryArray[$DirectoryIndex * 2][$ArrayCount] $DirectoryArray[$DirectoryIndex][0] = DllStructGetData($tWIN32_FIND_DATA, "cFileName") $DirectoryArray[$DirectoryIndex][1] = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh")) If $ArrayCount = 6 Then $DirectoryArray[$DirectoryIndex][2] = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes") $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime")) $DirectoryArray[$DirectoryIndex][3] = _Date_Time_FileTimeToStr($tFileTime, $bFmt) $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime")) $DirectoryArray[$DirectoryIndex][4] = _Date_Time_FileTimeToStr($tFileTime, $bFmt) $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime")) $DirectoryArray[$DirectoryIndex][5] = _Date_Time_FileTimeToStr($tFileTime, $bFmt) EndIf EndIf ElseIf Not $IsDir And $Return_Type <> 1 Then $FileIndex += 1 If $ArrayCount = 1 Then If UBound($FileArray) < $FileIndex + 1 Then ReDim $FileArray[$FileIndex * 2] $FileArray[$FileIndex] = DllStructGetData($tWIN32_FIND_DATA, "cFileName") Else If UBound($FileArray) < $FileIndex + 1 Then ReDim $FileArray[$FileIndex * 2][$ArrayCount] $FileArray[$FileIndex][0] = DllStructGetData($tWIN32_FIND_DATA, "cFileName") $FileArray[$FileIndex][1] = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh")) If $ArrayCount = 6 Then $FileArray[$FileIndex][2] = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes") $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime")) $FileArray[$FileIndex][3] = _Date_Time_FileTimeToStr($tFileTime, $bFmt) $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime")) $FileArray[$FileIndex][4] = _Date_Time_FileTimeToStr($tFileTime, $bFmt) $tFileTime = DllStructCreate($tagFILETIME, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime")) $FileArray[$FileIndex][5] = _Date_Time_FileTimeToStr($tFileTime, $bFmt) EndIf EndIf EndIf $callFindNext = DllCall($__ghWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $callFindFirst[0], 'struct*', $tWIN32_FIND_DATA) If @error Then Return SetError(2, _WinAPI_GetLastError(), 0) Until Not $callFindNext[0] DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $callFindFirst[0]) ; No need to test @error. If $ArrayCount = 1 Then $DirectoryArray[0] = $DirectoryIndex $FileArray[0] = $FileIndex Else $DirectoryArray[0][0] = $DirectoryIndex $FileArray[0][0] = $FileIndex EndIf Switch $Return_Type Case 0 If $ArrayCount = 1 Then ReDim $DirectoryArray[$DirectoryArray[0] + $FileArray[0] + 1] For $i = 1 To $FileIndex $DirectoryArray[$DirectoryArray[0] + $i] = $FileArray[$i] Next $DirectoryArray[0] += $FileArray[0] Else ReDim $DirectoryArray[$DirectoryArray[0][0] + $FileArray[0][0] + 1][$ArrayCount] For $i = 1 To $FileIndex For $j = 0 To $ArrayCount - 1 $DirectoryArray[$DirectoryArray[0][0] + $i][$j] = $FileArray[$i][$j] Next Next $DirectoryArray[0][0] += $FileArray[0][0] EndIf Return $DirectoryArray Case 1 ReDim $DirectoryArray[$DirectoryIndex + 1] Return $DirectoryArray Case 2 ReDim $FileArray[$FileIndex + 1] Return $FileArray 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() $__ghWinInet_FTP = DllOpen('wininet.dll') EndFunc ;==>__FTP_Init Link to comment Share on other sites More sharing options...
mkultra Posted May 20, 2013 Author Share Posted May 20, 2013 Thats great and thanks for the advice on reading the manual. BUT, I cannot tell how to move through the files until i locate the last one. I also dont know if the process shows the files by time stamp or just how the FTP server offers them. Link to comment Share on other sites More sharing options...
BrewManNH Posted May 20, 2013 Share Posted May 20, 2013 I don't believe that the FTP functions have any way of determing what file was created last, you'll have to loop through the files taking note of the file date/time and making that determination yourself in your code. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
jdelaney Posted May 20, 2013 Share Posted May 20, 2013 (edited) #include <FTPEx.au3> $oFTP = _FTP_Open("myftp") $oConnect = _FTP_Connect($oFTP, "yourserver", "user", "password") ConsoleWrite(_FTP_DirSetCurrent($oFTP, "/yourdir") & @CRLF) Local $h_Handle Local $aFile = _FTP_FindFileFirst($oConnect, "/yourdir", $h_Handle) Dim $aFiles[1][3] $aFiles[0][0] = $aFile[10] $aFiles[0][1] = _FTP_FileTimeLoHiToStr($aFile[6],$aFile[7]) $aFiles[0][2] = $aFile[7] ConsoleWrite($aFiles[0][0] & " " & $aFiles[0][1] & @CRLF) While True $aFile = _FTP_FindFileNext($h_Handle) If UBound($aFile)=1 Then ExitLoop ReDim $aFiles[uBound($aFiles)+1][3] $aFiles[uBound($aFiles)-1][0] = $aFile[10] $aFiles[uBound($aFiles)-1][1] = _FTP_FileTimeLoHiToStr($aFile[6],$aFile[7]) $aFiles[uBound($aFiles)-1][2] = $aFile[7] ConsoleWrite($aFiles[uBound($aFiles)-1][0] & " " & $aFiles[uBound($aFiles)-1][1]) & @CRLF) WEnd _ArraySort($aFiles,1,0,0,2) ConsoleWrite("newest file=[" & $aFiles[0][0] & "] modified date=[" & $aFiles[0][1] & "]." & @CRLF) ;~ _ArrayDisplay($aFiles) _FTP_Close($oFTP) edit: i give up, this editor is horrible Edited May 20, 2013 by jdelaney IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now