Ich weiß nicht, ob man den Login wirklich nur vor die Schleife setzen kann, da ja auch irgendwann ein Timeout eintritt, oder?
Stimmt an eine evtl. Zwangstrennung durch den FTP-Server wegen Inaktivität habe ich nicht gedacht. Deshlb jetzt Login bei Bedarf:
Spoiler anzeigen
#NoTrayIcon
[/autoit] [autoit][/autoit] [autoit]#include <FTPEx.au3>
;HotKeySet("{ESC}", "Terminate") nur falls der Benutzer das Skript abbreche können soll
OnAutoItExitRegister("Terminate")
Const $sServer = 'test.mymabbo.org' ; Servername
Const $sUser = 'test234' ; Benutzername
Const $sPassword = 'x' ; Passwort des Benutzers
Const $sLocalFile = @ScriptDir & '\Beispiel.dat' ; Lokale Datei, die hochgeladen werden soll
Const $sRemoteFile = 'Beispiel.dat' ; Datei auf dem Server
Global $hFTP_Open, $hConnection = _LogIn($sServer, $sUser, $sPassword) ; Loginvorgang
_StartLoop(15)
[/autoit] [autoit][/autoit] [autoit]Func _StartLoop($iMin)
Local $hConnection, $iMS, $iCounter = 1
$iMS = $iMin * 60 * 1000
While FileExists($sLocalFile)
If $hFTP_Open = 0 Then
; Loginvorgang beim 1. Mal und später nach einer Zwangstrennung => ergibt Fehler bei FilePut
$hConnection = _LogIn($sServer, $sUser, $sPassword)
EndIf
_FTP_FilePut($hConnection, $sLocalFile, $sRemoteFile) ; Datei $sLocalFile hochladen
If @error Then
MsgBox(16, 'Fehler', 'Fehler beim Upload der Datei.')
Terminate()
$hFTP_Open = 0
Else
MsgBox(64, 'Info', 'Datei erfolgreich hochgeladen (zum ' & $iCounter & '. Mal).')
$iCounter += 1
EndIf
Sleep($iMS) ; wartet 15 Minuten
WEnd
EndFunc ;==>_StartLoop
Func _LogIn($sServer, $sUser, $sPassword)
Local $hFTP_Connect
$hFTP_Open = _FTP_Open('FTP')
$hFTP_Connect = _FTP_Connect($hFTP_Open, $sServer, $sUser, $sPassword)
If @error Then
MsgBox(16, 'Fehler', 'Benutzerdaten überprüfen, konnte keine Verbindung zum Server herstellen.')
Exit
Else
Return $hFTP_Connect
EndIf
EndFunc ;==>_LogIn
Func Terminate()
_FTP_Close($hFTP_Open)
Exit
EndFunc ;==>Terminate
mfg autoBert