Sign in to follow this  
Followers 0
BitByteBit

_FTPFindFileNext not updating list properly when files are deleted

4 posts in this topic

#1 ·  Posted (edited)

I wrote a little app to access my FTP, I made a function to delete and upload files.

I'm using http://www.autoitscript.com/forum/index.php?showtopic=94212 this UDF.

After I delete a file, it is told to run a function which gets all the file names and displays them in a list. However the deleted file doesn't disappear/the uploaded file isn't shown.

The files do get deleted/put on the server, so the issue isn't there. If I restart the program the files are shown.

Here is the code:

#include <FTP.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
Opt("TrayIconDebug", 1)
ProcessSetPriority(@AutoItPID,3)
HotKeySet("!z", "OpenCMD")
HotKeySet("!{Esc}", "Exit1")
HotKeySet("!{F4}", "Exit2")
$FU = "INTERNET_FLAG_TRANSFER_BINARY"
$Flag = "INTERNET_FLAG_RELOAD"
Global $FileName[1]
Global $FileName1[1]
$Connected = False
$Clicked = 0
$DummyCheck = ""


#Region Login/Open
Local $hFtp, $hSession, $hFile, $tBuffer, $nSize, $nBytes
Const $Host = ''
const $Login = 'anonymous'
const $Password = 'anonymous@anonymous.co.uk'
#EndRegion Login/Open




#Region ### START Koda GUI section ### Form=
$FTP = GUICreate("File Server", 335, 242, 192, 124, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_WINDOWEDGE))
GUISetBkColor(0x99B4D1)
$Status = GUICtrlCreateLabel("Not Connected", 68, 5, 125, 15, $SS_CENTER)
$Connect = GUICtrlCreateButton("Connect", 248, 20, 75, 33, $WS_GROUP)
$Disconnect = GUICtrlCreateButton("Disconnect", 248, 100, 75, 33, $WS_GROUP)
$List1 = GUICtrlCreateList("", 8, 20, 233, 149)
$Put = GUICtrlCreateInput("", 8, 185, 225, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
GUICtrlSetState(-1, $GUI_ACCEPTFILES)
$Upload = GUICtrlCreateButton("Upload", 246, 183, 78, 25, $WS_GROUP)
$Back = GUICtrlCreateButton("Back", 248, 58, 75, 33, $WS_GROUP)
$CMD = GUICtrlCreateButton("CMD", 247, 137, 75, 33, $WS_GROUP)
$Active = GUICtrlCreateLabel("Current Directory:", 8, 220, 86, 17)
$ActiveDir = GUICtrlCreateLabel("Not connected", 96, 220, 240, 17)
GUISetState(@SW_SHOW)
;Delete Menu
GUICtrlCreateContextMenu($List1)
$delete = GUICtrlCreateMenuItem("&Delete", $List1)
GUICtrlSetOnEvent(-1, "Delete")
#EndRegion ### END Koda GUI section ###




;

;
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Disconnect()
            Exit
        Case $CMD
            OpenCMD()
        Case $Back
            Back()
        Case $Connect
            Connect()
        Case $Disconnect
            Disconnect()
        Case $List1
            $Check = GUICtrlRead($List1)
            $FileName = StringSplit($Check, '.', 1)
            If Not @error Then
                $Clicked = $Clicked + 1
                If $Clicked > 1  And $Check = $DummyCheck Then
                    DownloadFile()
                    $Clicked = 0
                Else
                $DummyCheck = $Check
                ;$Clicked = $Clicked + 1
                EndIf
            Else
                CD()
                $Path = _FTP_GetCurrentDir($hSession)
                GUICtrlSetData($ActiveDir, $Path)
                $Clicked = 0
            EndIf
        Case $Upload
            $Read = GUICtrlRead($Put)
            If $Read <> "" Then
                $FileName = StringSplit($Read, '\', 1)
                $FileName1 = UBound($FileName) - 1
                $Array1 = $FileName[$FileName1]
                Upload()
            Else
                MsgBox(0, "!", "Please drag a file into the Input Box")
            EndIf
        Case $delete
            Delete()
    EndSwitch
WEnd

Func Delete()
    $Check = GUICtrlRead($List1)
    $Path = _FTP_GetCurrentDir($hSession)
    $File123 = $Path & "/" & $Check
    $Ques = MsgBox(4, "?", "Do you want to delete: " & $Path & "/" & $Check)
    If $Ques = 6 Then
        _FTP_DeleteFile($hSession, $Check)
        If Not @error Then
            ToolTip($Path & $Check &" has been deleted")
            Sleep(1000)
            ToolTip("")
            GUICtrlSetData($List1, "")
            GetFileList()
            $Clicked = 0
        Else
            ToolTip("Unable to delete: " & $Path)
            Sleep(950)
            ToolTip("")
        EndIf
    EndIf
    If $Ques = 7 Then
        Sleep(10)
        $Clicked = 0
    EndIf
EndFunc   ;==>Delete


Func Back()
    $Path = _FTP_GetCurrentDir($hSession)
    ;If not  $Path <> "/" Then MsgBox(0,"!","You are in the root")
    ;MsgBox(0,"",$Path)

    $FileName = StringSplit($Path, '/', 2)
    $FileName1 = UBound($FileName, 1) - 1
    $FileName1 = $FileName1 - 1
    $Array1 = $FileName[$FileName1]
    _FTP_SetCurrentDir($hSession, '/' & $Array1)
    GUICtrlSetData($List1, "")
    GetFileList()
    $Path = _FTP_GetCurrentDir($hSession)
    GUICtrlSetData($ActiveDir, $Path)
EndFunc   ;==>Back


Func CD()
    $Path = _FTP_GetCurrentDir($hSession)
    _FTP_SetCurrentDir($hSession, $Path & '/' & $Check)
    GUICtrlSetData($List1, "")
    Sleep(250)
    GetFileList()
EndFunc   ;==>CD


Func Connect()
    _FTP_Startup()
    $hFtp = _FTP_Open('MyFtp')
    $hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
    If Not @error Then
        GUICtrlSetData($Status, "Connected")
        ToolTip("Connected as 'Anonymous'")
        Sleep(850)
        ToolTip("")
    EndIf
    _FTP_SetCurrentDir($hSession, '/aftp')
    If Not @error Then
        GetFileList()
        GUICtrlSetData($Status, "Connected as Anonymous")
        $Path = _FTP_GetCurrentDir($hSession)
        GUICtrlSetData($ActiveDir, $Path)
    EndIf
    $Connected = True
EndFunc   ;==>Connect


;I think the problem is here, or how it is being called, I say that because the same function works in a lighter version of the program I made. Any ideas?
Func GetFileList()
    $tFind = DllStructCreate($tagWIN32_FIND_DATA)
    $hFind = _FTP_FileFindFirst($hSession, '', $tFind)
    _FTP_FileFindNext($hFind, $tFind)
    _FTP_FileFindNext($hFind, $tFind)
    while not @error
        $Data = DllStructGetData($tFind, 'FileName'); & @CR
        GUICtrlSetData($List1,$Data)
        _FTP_FileFindNext($hFind, $tFind)
    wend
    _FTP_FileFindClose($hFind)
EndFunc







Func Upload()
    If $Status = "Not Connected" Then
        Connect()
        ToolTip("Connecting")
    EndIf
    GUICtrlSetData($Status, "Uploading: " & $Array1)
    ToolTip("Uploading :" & $Array1)
    _FTP_PutFile($hSession, $Read, $Array1, $FU)
    If Not @error Then
        GUICtrlSetData($Status, "Uploaded :" & $Array1)
        ;GUICtrlSetData($List1, $Array1)
        ToolTip("Uploaded :" & $Array1)
        Sleep(2500)
        ToolTip("")
        GUICtrlSetData($Status, "Connected")
        GetFileList()
    Else
        ToolTip("Unable to Upload file:" & $Array1)
        GUICtrlSetData($Status, "Unable to Upload file:" & $Array1)
        Sleep(1750)
        ToolTip("")
    EndIf
EndFunc   ;==>Upload


Func DownloadFile()
    $Selection = GUICtrlRead($List1)
    GUICtrlSetData($Status, "Downloading. . .")
    _FTP_GetFile($hSession, $Selection, @DesktopDir & '\' & $Selection)
    If Not @error Then
        GUICtrlSetData($Status, "Download Successful")
        ToolTip("Downloaded: " & $Selection & @CRLF & @DesktopDir & '\' & $Selection)
        Sleep(2500)
        ToolTip("")
        GUICtrlSetData($Status, "Connected")
        ToolTip("Opening: " & $Selection & @CRLF & @DesktopDir & '\' & $Selection)
        ShellExecute(@DesktopDir & '\' & $Selection)
        ToolTip("")
    Else
        GUICtrlSetData($Status, "Download Unsuccessful")
        ToolTip("Unable to download file: " & $Selection)
        Sleep(1500)
        ToolTip("")
        GUICtrlSetData($Status, "Connected")
    EndIf
EndFunc   ;==>DownloadFile



Func Disconnect()
    _FTP_Disconnect($hSession)
    _FTP_Close($hFtp)
    _FTP_Shutdown()
    GUICtrlSetData($Status, "Not Connected")
    GUICtrlSetData($List1, "")
    GUICtrlSetData($ActiveDir, "Not Connected")
    ;Exit]
    $Connected = False
EndFunc   ;==>Disconnect


Func OpenCMD()
    If $Connected = False Then
        ShellExecute("cmd", "/t:0a /k ftp XXX.co.uk")
        EndIf
        Sleep(2000)
        Sleep(150)
        Send("Anonymous{enter}")
        Sleep(275)
        Send("cd /FTP{enter}")
        Sleep(275)
        Send("dir{enter}")
    Else

        $Path = _FTP_GetCurrentDir($hSession)
        ShellExecute("cmd", "/t:0a /k ftp XXX.co.uk")
        EndIf
        Sleep(200)
        ;Send("anonymous{enter}")
        Sleep(150)
        ;Send("Anonymous{enter}")
        Sleep(175)
        Send("cd " & $Path & "{enter}")
        Sleep(175)
        Send("dir{enter}")
    EndIf
EndFunc   ;==>OpenCMD


Func Exit1()
    Disconnect()
    Exit
EndFunc   ;==>Exit1


Func Exit2()
    If WinActive("File Server") = 1 Then
        Disconnect()
        Exit
    EndIf
EndFunc   ;==>Exit2

Any ideas?

Edited by BitByteBit

Share this post


Link to post
Share on other sites



Thanks!

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