toofat Posted January 19, 2014 Posted January 19, 2014 (edited) If somebody could please explain to me why is function "_FTP_FindFileFirst" returning over and over again the same files that I have allready downloaded and deleted, and why does the function "_FTP_FileGet" reports "Succeeded" on downloading non-existing file? Only the function "_FTP_FileDelete" works OK (it reports Failed on all passes except the first). expandcollapse popup$iStatus = 0 $sServer = 'ftp.test.com' $sUsername = 'userftp' $sPass = 'passftp' $iInterval = 10 ConsoleWrite ('Opening a new FTP session ... ') $hOpen = _FTP_Open ('FTP Control ' & @AutoItPID) If @error Then ConsoleWrite ('Failed' & @CRLF) Sleep (5000) Exit EndIf ConsoleWrite ('Succeeded' & @CRLF) Dim $FTPTime = 1000*$iInterval, $FTPStart = TimerInit (), $FTPEnd = TimerDiff ($FTPStart) While 'FTP Connection' $FTPEnd = TimerDiff ($FTPStart) Select Case $FTPEnd > $FTPTime If NOT $iStatus Then ConsoleWrite ('Connecting to FTP server: ftp://' & $sUsername & ':' & $sPass & '@' & $sServer & ' ... ') $hConnect = _FTP_Connect ($hOpen, $sServer, $sUsername, $sPass, 1) If @error Then ConsoleWrite ('Failed' & @CRLF) $FTPStart = TimerInit () ContinueLoop EndIf ConsoleWrite ('Succeeded' & @CRLF) ConsoleWrite ('--------------------------------------------------' & @CRLF & @CRLF) EndIf $iStatus = _FTP_Command ($hConnect, 'STAT') If NOT $iStatus Then ConsoleWrite ('Connection to FTP server was lost' & @CRLF) $FTPStart = TimerInit () ContinueLoop EndIf Dim $h_Handle $aFile = _FTP_FindFileFirst ($hConnect, '/Dir1/Dir2/Dir3/', $h_Handle) If NOT @error Then While 'FTP Download/Delete' Sleep (10) ConsoleWrite ('File found: ' & $aFile[10] & @CRLF) ConsoleWrite ('Downloading file ... ') _FTP_FileGet ($hConnect, '/Dir1/Dir2/Dir3/' & $aFile[10], 'D:\TargetDir\' & $aFile[10], False) If @error Then ConsoleWrite ('Failed' & @CRLF) Else ConsoleWrite ('Succeeded' & @CRLF) ConsoleWrite ('Deleting file ... ') _FTP_FileDelete ($hConnect, '/Dir1/Dir2/Dir3/' & $aFile[10]) If @error Then ConsoleWrite ('Failed' & @CRLF) Else ConsoleWrite ('Succeeded' & @CRLF) EndIf EndIf ConsoleWrite ('--------------------------------------------------' & @CRLF) $aFile = _FTP_FindFileNext ($h_Handle) If @error Then ExitLoop WEnd EndIf $aClose = _FTP_FindFileClose ($h_Handle) ConsoleWrite ('No new files' & @CRLF) $FTPStart = TimerInit () EndSelect WEnd $hDisconnect = _FTP_Close ($hConnect) $hClose = _FTP_Close ($hOpen) Exit Edited January 19, 2014 by toofat
l3ill Posted January 19, 2014 Posted January 19, 2014 Hi toofat, IMHO (in my humble opinion) you have a lot going on in this long list of Functions and arguments. My suggestion would be to clean it up by putting each individual "Job" in a Function and call it accordingly. This will make it much easier to troubleshoot / error check and even read and use your script. See the Help File for Language Reference / User Functions. Bill My Contributions... SnippetBrowser NewSciTE PathFinder Text File Manipulation FTP Connection Tester / INI File - Read, Write, Save & Load Example
toofat Posted January 20, 2014 Author Posted January 20, 2014 (edited) "I3ill" is this any better ... script is compiled as console app #include <FTPEx.au3> $sServer = 'ftp.myfirm.com' $sUsername = 'UserLogin' $sPass = 'UserPass' $hOpen = _FTP_Open ('FTP Control') $hConnect = _FTP_Connect ($hOpen, $sServer, $sUsername, $sPass, 1) _FTP_DirSetCurrent ($hConnect, '/Dir1/Dir2') While 'FTP Connection' Dim $h_Handle $aFile = _FTP_FindFileFirst ($hConnect, '/Dir1/Dir2/', $h_Handle) If NOT @error Then While 'FTP Download/Delete' Sleep (10) ConsoleWrite ('File found: ' & $aFile[10] & @CRLF) _FTP_FileGet ($hConnect, '/Dir1/Dir2/' & $aFile[10], 'D:\FTPtarget\' & $aFile[10], False) If NOT @error Then ConsoleWrite ('Downloaded file ' & $aFile[10] & @CRLF) _FTP_FileDelete ($hConnect, '/Dir1/Dir2/' & $aFile[10]) If NOT @error Then ConsoleWrite ('Deleted file' & @CRLF) EndIf $aFile = _FTP_FindFileNext ($h_Handle) If @error Then ExitLoop WEnd EndIf $aClose = _FTP_FindFileClose ($h_Handle) ConsoleWrite ('Waiting 10s' & @CRLF & @CRLF) Sleep (10000) WEnd $hDisconnect = _FTP_Close ($hConnect) $hClose = _FTP_Close ($hOpen) Exit One more thing. If I delete downloaded file from the Target dir, even thou the file no longer exists on the FTP server (deleted in the first pass), it is successfully downoloaded once again, and again, and again ... I supose from the cache, or ??? And it doesn't help if I do it like this #include <FTPEx.au3> $sServer = 'ftp.myfirm.com' $sUsername = 'UserLogin' $sPass = 'UserPass' While 'FTP Connection' $hOpen = _FTP_Open ('FTP Control') $hConnect = _FTP_Connect ($hOpen, $sServer, $sUsername, $sPass, 1) _FTP_DirSetCurrent ($hConnect, '/Dir1/Dir2') Dim $h_Handle $aFile = _FTP_FindFileFirst ($hConnect, '/Dir1/Dir2/', $h_Handle) If NOT @error Then While 'FTP Download/Delete' Sleep (10) ConsoleWrite ('File found: ' & $aFile[10] & @CRLF) _FTP_FileGet ($hConnect, '/Dir1/Dir2/' & $aFile[10], 'D:\FTPtarget\' & $aFile[10], False) If NOT @error Then ConsoleWrite ('Downloaded file ' & $aFile[10] & @CRLF) _FTP_FileDelete ($hConnect, '/Dir1/Dir2/' & $aFile[10]) If NOT @error Then ConsoleWrite ('Deleted file' & @CRLF) EndIf $aFile = _FTP_FindFileNext ($h_Handle) If @error Then ExitLoop WEnd EndIf $aClose = _FTP_FindFileClose ($h_Handle) $hDisconnect = _FTP_Close ($hConnect) $hClose = _FTP_Close ($hOpen) ConsoleWrite ('Waiting 10s' & @CRLF & @CRLF) Sleep (10000) WEnd Exit Edited January 20, 2014 by toofat
Solution toofat Posted January 20, 2014 Author Solution Posted January 20, 2014 OK got it #include <FTPEx.au3> $sServer = 'ftp.myfirm.com' $sUsername = 'UserLogin' $sPass = 'UserPass' $hOpen = _FTP_Open ('FTP Control') $hConnect = _FTP_Connect ($hOpen, $sServer, $sUsername, $sPass, 1) _FTP_DirSetCurrent ($hConnect, '/Dir1/Dir2') While 'FTP Connection' Dim $h_Handle $aFile = _FTP_FindFileFirst ($hConnect, '/Dir1/Dir2/', $h_Handle, $INTERNET_FLAG_NO_CACHE_WRITE) If NOT @error Then While 'FTP Download/Delete' Sleep (10) ConsoleWrite ('File found: ' & $aFile[10] & @CRLF) _FTP_FileGet ($hConnect, '/Dir1/Dir2/' & $aFile[10], 'D:\FTPtarget\' & $aFile[10], False, 0, $INTERNET_FLAG_RELOAD) If NOT @error Then ConsoleWrite ('Downloaded file ' & $aFile[10] & @CRLF) _FTP_FileDelete ($hConnect, '/Dir1/Dir2/' & $aFile[10]) If NOT @error Then ConsoleWrite ('Deleted file' & @CRLF) EndIf $aFile = _FTP_FindFileNext ($h_Handle) If @error Then ExitLoop WEnd EndIf $aClose = _FTP_FindFileClose ($h_Handle) ConsoleWrite ('Waiting 10s' & @CRLF & @CRLF) Sleep (10000) WEnd $hDisconnect = _FTP_Close ($hConnect) $hClose = _FTP_Close ($hOpen) Exit Added two flags: 1. $INTERNET_FLAG_NO_CACHE_WRITE to "_FTP_FindFileFirst" 2. $INTERNET_FLAG_RELOAD to "_FTP_FileGet" I should have read the help file better ...
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