Sign in to follow this  
Followers 0
dozr

FTP upload

3 posts in this topic

Hiya. I'm fairly new to autoit and I need some help reguarding a FTP upload script. I've been looking around for ages everywhere, diden't find anything helpful, so I decided to ask here.

How can I make a script that uploads images from my computer to my FTP server? I've started abit here, dosent work though:

#include <FTP.au3>

$server = "ftp.myserver.com"
$username = "myusername"
$pass = "mypass"
$dir = "/upload/"

$Open = _FTPOpen('MyFTP Control')
$Conn = _FTPConnect($Open, $server, $username, $pass)
upload()


func upload()
$file=FileOpenDialog("Upload file", @ComputerName & "\", "Images (*.jpg;*.bmp;*.png,*.gif)", 1 + 4 )
$msgfile=FileGetShortName($file)
$Ftpp = _FtpPutFile($Conn, $file, $dir&$file)
$Ftpc = _FTPClose($Open)
If $file="" Then
    Exit
    Else
MsgBox(0,"Success",$msgfile & " has been uploaded.")
EndIf
EndFunc

Share this post


Link to post
Share on other sites



#3 ·  Posted (edited)

Here is an example which uploads all images from a folder via FTP.

All the comments are Dutch and it doesn't rely on any non-standard includes, since I wrote this for a friend.

#Include <File.au3>

; === Opties ===
; Optie variabele waarin staat in welke directories je gaat zoeken.
; Voer geen directories in zoals C:\123\ EN C:\123\456, gebruik dan alleen C:\123\
Local $opt_SearchDir[1] = ["C:\Documents and Settings\Jos\My Documents\] ; <== Invullen

; Optie voor file extensions.
Local $opt_FileExtensions = "*.jpg; *.jpeg; *.png; *.bmp; *.gif"

; FTP opties
Local $opt_FTP_Server = "ftp.wut.nl" ; <== Invullen
Local $opt_FTP_Username = "" ; <== Invullen
Local $opt_FTP_Password = "" ; <== Invullen
Local $opt_FTP_Directory = "/" ; Moet met / gedaan. Moet een / aan het begin en aan het eind. Voorbeeld: /public_html/images/

; =======================
; === Hoofd programma ===

;If ( Not @Compiled ) Then 
;   MsgBox(0, "", "This script needs to be compiled.")
;   Exit
;EndIf

RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "UploadImageToFTP", "REG_SZ", @ScriptFullPath)
;RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "UploadImageToFTP")

Global $hFtp

_Connect()

For $i = 0 to UBound($opt_SearchDir)-1
    $lFile = _FileListToArrayEx($opt_SearchDir[$i],$opt_FileExtensions,True)
    For $n = 1 To UBound($lFile)-1
        _FTPUpload($lFile[$n])
    Next
Next

_Close()

Exit

Func _Connect()
    $hFtp = _FTPOpen("ManadarX")
    _FTPConnect($hFtp, $opt_FTP_Server, $opt_FTP_Username, $opt_FTP_Password, 21, 1, 0x08000000)
    If @error Then 
        MsgBox(0,"UploadToFTP", "Er kan geen verbinding worden gemaakt met de server. ")
        Exit
    EndIf
    
    _FTPMakeDir($hFtp, $opt_FTP_Directory)
    
    _FtpSetCurrentDir($hFtp, $opt_FTP_Directory)
EndFunc

Func _FTPUpload($pFile)
    Local $aDrive, $aDir, $aFile, $aExt
    
    ConsoleWrite("Uploading file " & $pFile & @CRLF)
    _PathSplit($pFile,$aDrive,$aDir,$aFile,$aExt)
    
    _FTPPutFile($hFtp, $pFile, $opt_FTP_Directory & $aFile & $aExt, 2) ;; <== Werkt dus niet
EndFunc

Func _Close()
    _FTPClose($hFtp)
EndFunc

; Utility functions
Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iRecurse = False)
    If Not FileExists($sPath) Then Return SetError(1, 1, '')
    If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
    ;If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
    ;Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
    $sFilter = StringRegExpReplace($sFilter, '\s*;\s*', ';')
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    ;For $iCC = 0 To 5
    ;    If StringInStr($sFilter, $aBadChar[$iCC]) Or _
    ;        StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
    ;Next
    If StringStripWS($sFilter, 8) = '' Then Return SetError(2, 2, '')
    Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
    $sTFolder = $oFSO.GetSpecialFolder(2)
    Local $hOutFile = @TempDir & $oFSO.GetTempName
    If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
    Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead, $sHoldSplit
    For $iCC = 1 To $aSplit[0]
        If StringStripWS($aSplit[$iCC],8) = '' Then ContinueLoop
        If StringLeft($aSplit[$iCC], 1) = '.' And _
            UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
        $sHoldSplit &= '"' & $sPath & $aSplit[$iCC] & '" '
    Next
    $sHoldSplit = StringTrimRight($sHoldSplit, 1)
    If $iRecurse Then
        RunWait(@Comspec & ' /c dir /b /s /a ' & $sHoldSplit & ' > "' & $hOutFile & '"', '', @SW_HIDE)
    Else
        RunWait(@ComSpec & ' /c dir /b /a ' & $sHoldSplit & ' /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
    EndIf
    $sRead &= FileRead($hOutFile)
    If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
    FileDelete($hOutFile)
    If StringStripWS($sRead, 8) = '' Then SetError(4, 4, '')
    Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
    Local $sHold
    For $iCC = 1 To $aFSplit[0]
        ;If $sExclude And StringLeft($aFSplit[$iCC], StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
            
        If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') = 0 And _
            StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') = 0 Then
            If StringRegExp($aFSplit[$iCC], '\w:\\') = 0 Then
                $sHold &= $sPath & $aFSplit[$iCC] & Chr(1)
            Else
                $sHold &= $aFSplit[$iCC] & Chr(1)
            EndIf
        EndIf
        
    Next
    If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(4, 4, '')
EndFunc



;FTP UDF, Updated By JohnMC On Sept 10th 2008
;
;A Map Of The Handle Array:
;[0]
;[1]= wininet.dll handle
;[2]= InternetOpen handle
;[3]= InternetConnect handle
;[4]= FTPFileFindFirst dll struct handle
;[5]= FtpFindFirstFile handle
;
;===============================================================================
;
; Function Name:    _FTPOpen()
; Description:      Opens an FTP session.
; Parameter(s):     $s_Agent        - Random name. ( like "myftp" )
;                   $l_AccessType   - I dont got a clue what this does.
;                   $s_ProxyName    - ProxyName.
;                   $s_ProxyBypass  - ProxyByPasses's.
;                   $l_Flags        - Special flags.
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - Returns an indentifier.
;                   On Failure - 0  and sets @ERROR
; Author(s):        Wouter van Kesteren.
;
;===============================================================================

Func _FTPOpen($s_Agent, $l_AccessType = 1, $s_ProxyName = '', $s_ProxyBypass = '', $l_Flags = 0)
    
    local $handles[6]
    $handles[1]=DllOpen("wininet.dll")
    
    Local $ai_InternetOpen = DllCall($handles[1], 'long', 'InternetOpen', 'str', $s_Agent, 'long', $l_AccessType, 'str', $s_ProxyName, 'str', $s_ProxyBypass, 'long', $l_Flags)
    If @error OR $ai_InternetOpen[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    $handles[2]=$ai_InternetOpen[0]
    
    Return $handles
    
EndFunc ;==> _FTPOpen()

;===============================================================================
;
; Function Name:    _FTPConnect()
; Description:      Connects to an FTP server.
; Parameter(s):     $l_InternetSession  - Array from _FTPOpen()
;                   $s_ServerName       - Server name/ip.
;                   $s_Username         - Username.
;                   $s_Password         - Password.
;                   $i_ServerPort       - Server port ( 0 is default (21) )
;                   $l_Service          - I dont got a clue what this does.
;                   $l_Flags            - Special flags.
;                   $l_Context          - I dont got a clue what this does.
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1.
;                   On Failure - 0  and sets @ERROR
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPConnect(ByRef $l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_ServerPort = 21, $l_Service = 1, $l_Flags = 0, $l_Context = 0)

    Local $ai_InternetConnect = DllCall($l_InternetSession[1], 'long', 'InternetConnect', 'long', $l_InternetSession[2], 'str', $s_ServerName, 'int', $i_ServerPort, 'str', $s_Username, 'str', $s_Password, 'long', $l_Service, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_InternetConnect[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    $l_InternetSession[3]=$ai_InternetConnect[0]
            
    Return 1
    
EndFunc ;==> _FTPConnect()

;===============================================================================
;
; Function Name:    _FTPPutFile()
; Description:      Puts an file on an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_LocalFile    - The local file.
;                   $s_RemoteFile   - The remote Location for the file.
;                   $l_Flags        - Special flags.
;                   $l_Context      - I dont got a clue what this does.
; Requirement(s):   DllCall, wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPPutFile(ByRef $l_FTPSession, $s_LocalFile, $s_RemoteFile, $l_Flags = 0, $l_Context = 0)

    Local $ai_FTPPutFile = DllCall($l_FTPSession[1], 'int', 'FtpPutFile', 'long', $l_FTPSession[3], 'str', $s_LocalFile, 'str', $s_RemoteFile, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_FTPPutFile[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPPutFile[0]
    
EndFunc ;==> _FTPPutFile()

;===================================================================================================

;
; Function Name:    _FTPPutFolderContents()
; Description:      Puts an folder on an FTP server. Recursivley if selected
; Parameter(s):     $l_FTPSession    - Array from _FTPOpen()
;                   $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
; Requirement(s):   wininet.dll
; Author(s):        Stumpii
;
;===================================================================================================

Func _FTPPutFolderContents(ByRef $l_FTPSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut)
    
; 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
        MsgBox(0, "Error", "No files/directories matched the search pattern")
        Exit
    EndIf
    
    While 1
        local $file = FileFindNextFile($search)
        If @error Then ExitLoop
        If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $file), "D") Then
            _FTPMakeDir($l_FTPSession, $s_RemoteFolder & "/" & $file)
            If $b_RecursivePut Then
                _FTPPutFolderContents($l_FTPSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, $b_RecursivePut)
            EndIf
        Else
            _FTPPutFile($l_FTPSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0)
        EndIf
WEnd

; Close the search handle
FileClose($search)

EndFunc ;==>_FTPPutFolderContents

;===============================================================================
;
; Function Name:    _FTPGetFoldercontents
; Description:      Recursively retrieves the contents of a directory on an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_RemoteDir    - The directory on the server to retrieve. (Needs trailing forwardslash)
;                   $s_LocalDir     - The Local directory to save to. (Needs trailing backslash)
;                   $b_RecursiveGet - Recurse through sub-dirs. 0=Non recursive (top dir only), 1=Recursive (note that this is not tru recursion)
;                   $s_searchfor    - (UNTESTED OTHER THEN DEFAULT) What to download, must be set to default * to download subfolders currently
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        JohnMC
;
;===============================================================================
Func _FTPGetFolderContents(ByRef $l_FTPSession, $s_RemoteDir, $s_LocalDir, $b_RecursiveGet=1, $s_searchfor="*")
    local $folderlist[1]
    Local $i=0

    While $i < UBound($folderlist)
        Local $subpath=$folderlist[$i]
        _FtpSetCurrentDir($l_FTPSession,"/" & $s_RemoteDir & $subpath)
        local $FileInfo = _FtpFileFindFirst ($l_FTPSession,$s_searchfor)
        
        while $FileInfo[0]<>0   
            if $FileInfo[1]=16 and $FileInfo[10] <> "." and $FileInfo[10] <> ".." And $b_RecursiveGet<>0 Then
                Local $iUBound = UBound($folderlist)
                ReDim $folderlist[$iUBound + 1]
                $folderlist[$iUBound] = "/" & $subpath & $FileInfo[10] & "/"
                
            elseif $FileInfo[1]=128 then
                $downloadto = $s_LocalDir & stringReplace ($subpath,"/","\")
                If Not FileExists($downloadto) then DirCreate($downloadto)
                _FTPGetFile($l_FTPSession,$FileInfo[10],$downloadto&$FileInfo[10])
            endif
    
            $FileInfo = _FtpFileFindNext($l_FTPSession)
        wend
        
        _FTPFileFindClose($l_FTPSession)
        $i+=1
    WEnd
EndFunc  ;==>_FTPGetFolderContents

;===============================================================================
;
; Function Name:    _FTPGetFile()
; Description:      Puts an file on an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_RemoteFile   - The remote file.
;                   $s_LocalFile    - The Local Location to download to.
;                   $l_FailEx       - If File Exists Localy 1=Fail 0=Proceed (Default) ;Fail Caused Crash For Me On My Vista Machine, changed default -JohnMC
;                   $l_FlagsA       - Special flags & Attributes. -JohnMC
;                   $l_Flags        - Special flags.
;                   $l_Context      - I dont got a clue what this does.
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Dick Bronsdijk
; Updated By JohnMC To Add $l_FailEx and $l_FlagsA
;
;===============================================================================

Func _FTPGetFile(ByRef $l_FTPSession, $s_RemoteFile,  $s_LocalFile, $l_FailEx = 0, $l_FlagsA = 0,  $l_Flags = 0, $l_Context = 0)

    Local $ai_FTPGetFile = DllCall($l_FTPSession[1], 'int', 'FtpGetFile', 'long', $l_FTPSession[3], 'str', $s_RemoteFile, 'str', $s_LocalFile, 'long', $l_FailEx, 'long', $l_FlagsA, 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_FTPGetFile[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPGetFile[0]
    
EndFunc;==> _FTPPutFile()
;===============================================================================
;
; Function Name:    _FTPDelFile()
; Description:      Delete an file from an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_RemoteFile   - The remote Location for the file.
; Requirement(s):   DllCall, wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPDelFile(ByRef $l_FTPSession, $s_RemoteFile)
    
    Local $ai_FTPPutFile = DllCall($l_FTPSession[1], 'int', 'FtpDeleteFile', 'long', $l_FTPSession[3], 'str', $s_RemoteFile)
    If @error OR $ai_FTPPutFile[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPPutFile[0]
    
EndFunc ;==> _FTPDelFile()

;===============================================================================
;
; Function Name:    _FTPRenameFile()
; Description:      Renames an file on an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_Existing     - The old file name.
;                   $s_New          - The new file name.
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPRenameFile(ByRef $l_FTPSession, $s_Existing, $s_New)
    
    Local $ai_FTPRenameFile = DllCall($l_FTPSession[1], 'int', 'FtpRenameFile', 'long', $l_FTPSession[3], 'str', $s_Existing, 'str', $s_New)
    If @error OR $ai_FTPRenameFile[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPRenameFile[0]
    
EndFunc ;==> _FTPRenameFile()

;===============================================================================
;
; Function Name:    _FTPMakeDir()
; Description:      Makes an Directory on an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_Remote       - The file name to be deleted.
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPMakeDir(ByRef $l_FTPSession, $s_Remote)
    
    Local $ai_FTPMakeDir = DllCall($l_FTPSession[1], 'int', 'FtpCreateDirectory', 'long', $l_FTPSession[3], 'str', $s_Remote)
    If @error OR $ai_FTPMakeDir[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPMakeDir[0]
    
EndFunc ;==> _FTPMakeDir()

;===============================================================================
;
; Function Name:    _FTPDelDir()
; Description:      Delete's an Directory on an FTP server.
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_Remote       - The Directory to be deleted.
; Requirement(s):   DllCall, wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPDelDir(ByRef $l_FTPSession, $s_Remote)
    
    Local $ai_FTPDelDir = DllCall($l_FTPSession[1], 'int', 'FtpRemoveDirectory', 'long', $l_FTPSession[3], 'str', $s_Remote)
    If @error OR $ai_FTPDelDir[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
        
    Return $ai_FTPDelDir[0]
    
EndFunc ;==> _FTPDelDir()

;===============================================================================
;
; Function Name:    _FTPGetFileSize()
; Description:      Gets the file size of a remote file
; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
;                   $s_FileName     - Remote file
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        J.o.a.c.h.i.m. d.e. K.o.n.i.n.g.
;
;===============================================================================

Func _FTPGetFileSize(ByRef $l_FTPSession, $s_FileName)

    Local $ai_FTPGetSizeHandle = DllCall($l_FTPSession[1], 'int', 'FtpOpenFile', 'long', $l_FTPSession[3], 'str', $s_FileName, 'long', 0x80000000, 'long', 0x04000002, 'long', 0)
    Local $ai_FTPGetFileSize = DllCall($l_FTPSession[1], 'int', 'FtpGetFileSize', 'long', $ai_FTPGetSizeHandle[0])
    If @error OR $ai_FTPGetFileSize[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    DllCall($l_FTPSession[1], 'int', 'InternetCloseHandle', 'str', $ai_FTPGetSizeHandle[0])

    Return $ai_FTPGetFileSize[0]
    
EndFunc ;==> _FTPGetFileSize() 

;===============================================================================
;
; Function Name:    _FTPGetCurrentDir()
; Description:      Get Current Directory on an FTP server.
; Parameter(s):     $l_FTPSession - Array from _FTPOpen()
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - Directory Name
;                   On Failure - 0
; Author(s):        Beast
;
;===============================================================================

Func _FTPGetCurrentDir(ByRef $l_FTPSession)

    Local $ai_FTPGetCurrentDir = DllCall($l_FTPSession[1], 'int', 'FtpGetCurrentDirectory', 'long', $l_FTPSession[3], 'str', "", 'long_ptr', 260)
    If @error OR $ai_FTPGetCurrentDir[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    Return $ai_FTPGetCurrentDir[2]


EndFunc;==> _FTPGetCurrentDir()

;===============================================================================
;
; Function Name:    _FtpSetCurrentDir()
; Description:      Set Current Directory on an FTP server.
; Parameter(s):     $l_FTPSession    - Array from _FTPOpen()
;                   $s_Remote        - The Directory to be set.
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Beast
;
;===============================================================================

Func _FtpSetCurrentDir(ByRef $l_FTPSession, $s_Remote)
    
    Local $ai_FTPSetCurrentDir = DllCall($l_FTPSession[1], 'int', 'FtpSetCurrentDirectory', 'long', $l_FTPSession[3], 'str', $s_Remote)
    If @error OR $ai_FTPSetCurrentDir[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
        
    Return $ai_FTPSetCurrentDir[0]
    

EndFunc;==> _FtpSetCurrentDir()

;===============================================================================
;
; Function Name:    _FTPFileFindFirst()
; Description:      Find First File on an FTP server.
; Parameter(s):     $l_FTPSession - Array from _FTPOpen()
;                   $s_RemoteFile   - The remote file to find
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Dick Bronsdijk
;
;===============================================================================

Func _FTPFileFindFirst(ByRef $l_FTPSession, $s_RemoteFile, $l_Flags = 0, $l_Context = 0)

    $l_FTPSession[4]=DllStructCreate("int;uint[2];uint[2];uint[2];int;int;int;int;char[256];char[14]")

    if @error Then
        SetError(-2)
        Return ""
    endif

    Dim $a_FTPFileList[1]
    $a_FTPFileList[0] = 0

    Local $ai_FTPPutFile = DllCall($l_FTPSession[1], 'int', 'FtpFindFirstFile', 'long', $l_FTPSession[3], 'str', $s_RemoteFile, 'ptr', DllStructGetPtr($l_FTPSession[4]), 'long', $l_Flags, 'long', $l_Context)
    If @error OR $ai_FTPPutFile[0] = 0 Then
        SetError(-1)
        Return $a_FTPFileList
    EndIf
    $l_FTPSession[5] = $ai_FTPPutFile[0]
    $FileName = DllStructGetData($l_FTPSession[4], 9)

    Dim $a_FTPFileList[12]
    $a_FTPFileList[0] = 12
    $a_FTPFileList[1] = DllStructGetData($l_FTPSession[4], 1)    ; File Attributes
    $a_FTPFileList[2] = DllStructGetData($l_FTPSession[4], 2, 1) ; Creation Time Low
    $a_FTPFileList[3] = DllStructGetData($l_FTPSession[4], 2, 2) ; Creation Time High
    $a_FTPFileList[4] = DllStructGetData($l_FTPSession[4], 3, 1) ; Access Time Low
    $a_FTPFileList[5] = DllStructGetData($l_FTPSession[4], 3, 2) ; Access Time High
    $a_FTPFileList[6] = DllStructGetData($l_FTPSession[4], 4, 1) ; Last Write Low
    $a_FTPFileList[7] = DllStructGetData($l_FTPSession[4], 4, 2) ; Last Write High
    $a_FTPFileList[8] = DllStructGetData($l_FTPSession[4], 5)    ; File Size High
    $a_FTPFileList[9] = DllStructGetData($l_FTPSession[4], 6)    ; File Size Low
    $a_FTPFileList[10] = DllStructGetData($l_FTPSession[4], 9)   ; File Name
    $a_FTPFileList[11] = DllStructGetData($l_FTPSession[4], 10)  ; Altername

    Return $a_FTPFileList

EndFunc;==> _FTPFileFindFirst()

;===============================================================================
;
; Function Name:    _FTPFileFindNext()
; Description:      Find Next File on an FTP server.
; Parameter(s):     $l_FTPSession - Array from _FTPOpen()
;                   $l_DllStruct  - 
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Dick Bronsdijk
;
;===============================================================================

Func _FTPFileFindNext(ByRef $l_FTPSession)

    Dim $a_FTPFileList[1]
    $a_FTPFileList[0] = 0

    Local $ai_FTPPutFile = DllCall($l_FTPSession[1], 'int', 'InternetFindNextFile', 'long',$l_FTPSession[5], 'ptr', DllStructGetPtr($l_FTPSession[4]))
    If @error OR $ai_FTPPutFile[0] = 0 Then
        SetError(-1)
        Return $a_FTPFileList
    EndIf

    Dim $a_FTPFileList[12]
    $a_FTPFileList[0] = 12
    $a_FTPFileList[1] = DllStructGetData($l_FTPSession[4], 1)    ; File Attributes
    $a_FTPFileList[2] = DllStructGetData($l_FTPSession[4], 2, 1) ; Creation Time Low
    $a_FTPFileList[3] = DllStructGetData($l_FTPSession[4], 2, 2) ; Creation Time High
    $a_FTPFileList[4] = DllStructGetData($l_FTPSession[4], 3, 1) ; Access Time Low
    $a_FTPFileList[5] = DllStructGetData($l_FTPSession[4], 3, 2) ; Access Time High
    $a_FTPFileList[6] = DllStructGetData($l_FTPSession[4], 4, 1) ; Last Write Low
    $a_FTPFileList[7] = DllStructGetData($l_FTPSession[4], 4, 2) ; Last Write High
    $a_FTPFileList[8] = DllStructGetData($l_FTPSession[4], 5)    ; File Size High
    $a_FTPFileList[9] = DllStructGetData($l_FTPSession[4], 6)    ; File Size Low
    $a_FTPFileList[10] = DllStructGetData($l_FTPSession[4], 9)   ; File Name
    $a_FTPFileList[11] = DllStructGetData($l_FTPSession[4], 10)  ; Altername

    Return $a_FTPFileList

EndFunc;==> _FTPFileFindNext()

;===============================================================================
;
; Function Name:    _FTPFileFindClose()
; Description:      Delete FindFile Structure.
; Parameter(s):     $l_FTPSession - Array from _FTPOpen()
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Dick Bronsdijk
;
;===============================================================================

Func _FTPFileFindClose($l_FTPSession)
   
    Local $ai_FTPPutFile = DllCall($l_FTPSession[1], 'int', 'InternetCloseHandle', 'long', $l_FTPSession[5])
    If @error OR $ai_FTPPutFile[0] = 0 Then
        SetError(-1)
        Return ""
    EndIf

    Return $ai_FTPPutFile[0]
   
EndFunc;==> _FTPFileFindClose()

;===============================================================================
;
; Function Name:    _FTPClose()
; Description:      Closes the _FTPOpen session.
; Parameter(s):     $l_InternetSession  - Array from _FTPOpen()
; Requirement(s):   wininet.dll
; Return Value(s):  On Success - 1
;                   On Failure - 0
; Author(s):        Wouter van Kesteren
;
;===============================================================================

Func _FTPClose($l_InternetSession)
    
    Local $ai_InternetCloseHandle = DllCall($l_InternetSession[1], 'int', 'InternetCloseHandle', 'long', $l_InternetSession[2])
    DLLClose($l_InternetSession[1])
    If @error OR $ai_InternetCloseHandle[0] = 0 Then
        SetError(-1)
        Return 0
    EndIf
    
    
    Return $ai_InternetCloseHandle[0]
    
EndFunc ;==> _FTPClose()
Edited by Manadar

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0