FTP.au3 oder "bin ich zu blöd?"

  • Ich versuche schon seit einer ganzen Zeit erfolglos eine Datei mit der FTP.au3 hochzuladen.
    Hier ist mein Quelltest (aus dem Beispiel)

    [autoit]

    #include <FTP.au3>

    [/autoit][autoit][/autoit][autoit]

    $server = 'ftp.-------.net'
    $username = '------'
    $pass = '---------'

    [/autoit][autoit][/autoit][autoit]

    $Open = _FTPOpen('MyFTP Control')
    $Conn = _FTPConnect($Open, $server, $username, $pass)
    $Ftpp = _FtpPutFile($Conn, 'C:\WINDOWS\Notepad.exe', '/Example.exe')
    $Ftpc = _FTPClose($Open)

    [/autoit]

    Doch es passiert nichts, nur nach kurzer Zeit verschwindet das AutoitSymbol unten rechts.
    Es wird kein Fehler ausgegeben aber auf den FTP Server wird auch keine Datei hochgeladen.
    Ich hab es schon mit den unterschiedlichsten FTP.au3 dateien probiert und auch das Script 1000 mal aus Beispielen herauskopiert und angepasst, aber es scheint nicht zu funktionieren.

    Einmal editiert, zuletzt von llllll (24. Oktober 2008 um 19:00)

  • Steig um auf den cmd-befehl.
    Dieses legt eine .Log-Datei an :thumbup:
    Dann siehst du den Fehler.


    [autoit]

    _RunDOS( "ftp.exe -n -i -s:" & $FTPData & " >" & @tempdir & "\Upload.log" )

    [/autoit]
    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • [autoit]

    #include <FTP.au3>

    [/autoit][autoit][/autoit][autoit]

    $server = 'ftp.-------.net'
    $username = '------'
    $pass = '---------'

    [/autoit][autoit][/autoit][autoit]

    $Open = _FTPOpen('MyFTP Control')
    $Conn = _FTPConnect($Open, $server, $username, $pass)
    $Ftpp = _FtpPutFile($Conn, 'C:\WINDOWS\Notepad.exe', 'Example.exe')
    $Ftpc = _FTPClose($Open)

    [/autoit]

    geht es so?

  • davor:

    [autoit]

    $dllop = DllOpen('wininet.dll')

    [/autoit]



    dahinter:

    [autoit]

    DllClose($dllop)

    [/autoit]
  • Auch mit DllOpen und DllClose und dem weggelassenen Schrägstrich funktioniert das Programm nicht.
    Morgen probier ich dann mal mithilfe einer log datei den Fehler zu finden.

  • Der Error kommt bei _FtpPutFile und ist -1. Das heißt die Verbidung wird schon richtig hergestellt. Wenn ich den Port aber auf 1 stell funktioniert auch das Verbinden nicht mehr. Hab die FTP_ex jetzt auch getestet, aber da passiert das Gleiche.

  • OK, dann mach mal ein _WinAPI_GetLasterror nach jeder Zeile und gib die Fehlercodes

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <FTP_Ex.au3>
    ...
    $error = ""
    $Open = _FTPOpen('MyFTP Control')
    $error &= _WinAPI_GetLasterror() & @CRLF
    $Conn = _FTPConnect($Open, $server, $username, $pass)
    $error &= _WinAPI_GetLasterror() & @CRLF
    $Ftpp = _FtpPutFile($Conn, 'C:\WINDOWS\Notepad.exe', 'Example.exe')
    $error &= _WinAPI_GetLasterror() & @CRLF
    $Ftpc = _FTPClose($Open)
    $error &= _WinAPI_GetLasterror() & @CRLF
    MsgBox(0,"Errors:", $error)

    [/autoit]
  • OK, der Fehler ist ein erweiterter, der extra abgefragt werden muss. Also:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <FTP_Ex.au3>
    ...
    $error = ""
    $Open = _FTPOpen('MyFTP Control')
    $error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    $Conn = _FTPConnect($Open, $server, $username, $pass)
    $error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    $Ftpp = _FtpPutFile($Conn, 'C:\WINDOWS\Notepad.exe', 'Example.exe')
    $error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    $Ftpc = _FTPClose($Open)
    $error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    MsgBox(0,"Errors:", $error)

    [/autoit] [autoit][/autoit] [autoit]

    Func _FTP_InternetGetLastResponseInfo()
    Local $tText

    [/autoit] [autoit][/autoit] [autoit]

    $tText = DllStructCreate("char Text[4096]")
    Local $ret = DllCall($GLOBAL_FTP_WININETHANDLE,"long","InternetGetLastResponseInfo","dword*",0,"ptr",DllStructGetPtr($tText),"dword*",4096)
    If @error Then Return SetError(1,0,"")
    $tText = StringLeft(DllStructGetData($tText, "Text"),$ret[3])
    Return SetError(0,$ret[1],$tText)
    EndFunc ;==>_WinAPI_GetLastErrorMessage

    [/autoit]
  • [Blockierte Grafik: http://img221.imageshack.us/img221/8898/errorjq7.jpg]

    (Wie kann ich BIlder einbinden? :/)


    Die Verbindung stellt er her, aber wenn er die Datei hochladen will nutzt er anscheinend nicht die erstellte Connection.
    Edit GtaSpider: Um Bilder einzufügen braucht du den Direktlink des Bildes.
    Also nicht http://img221.imageshack.us/my.php?image=errorjq7.jpg sondern http://img221.imageshack.us/img221/8898/errorjq7.jpg (Rechte maustaste -> Grafik anzeigen im firefox) Habs mal für dich geändert :thumbup:

    Einmal editiert, zuletzt von GtaSpider (25. Oktober 2008 um 00:17)

  • Also, noch mal aber diesmal mit passivem Modus.: FTP_Ex.au3 mit
    $Conn = _FTPConnect($Open, $server, $username, $pass,1) -> nach passwort kommt da der Passiv-modus.
    Sonst fällt mir nichts mehr ein :(

  • ok, damit klappt es auch :thumbup: Danke für die gute hilfe.
    Komisch warum es vorher nicht ging, hier nochmal der Code:

    [autoit]

    #include <WinAPI.au3>
    #include <FTP_Ex.au3>
    $dllop = DllOpen('wininet.dll')

    [/autoit][autoit][/autoit][autoit]

    $server = 'ftp.-----.net'
    $username = '----'
    $pass = '-------'

    [/autoit][autoit][/autoit][autoit]

    ;$error = ""
    $Open = _FTPOpen('MyFTP Control')
    ;$error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    $Conn = _FTPConnect($Open, $server, $username, $pass, 1)
    ;$error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    $Ftpp = _FtpPutFile($Conn, 'C:\WINDOWS\Notepad.exe', 'Example.exe')
    ;$error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    $Ftpc = _FTPClose($Open)
    ;$error &= _FTP_InternetGetLastResponseInfo() & @CRLF
    ;MsgBox(0,"Errors:", $error)

    [/autoit][autoit][/autoit][autoit]

    ;Func _FTP_InternetGetLastResponseInfo()
    ; Local $tText
    ;
    ; $tText = DllStructCreate("char Text[4096]")
    ; Local $ret = DllCall($GLOBAL_FTP_WININETHANDLE,"long","InternetGetLastResponseInfo","dword*",0,"ptr",DllStructGetPtr($tText),"dword*",4096)
    ; If @error Then Return SetError(1,0,"")
    ; $tText = StringLeft(DllStructGetData($tText, "Text"),$ret[3])
    ; Return SetError(0,$ret[1],$tText)
    ;EndFunc ;==>_WinAPI_GetLastErrorMessage

    [/autoit][autoit][/autoit][autoit]

    DllClose($dllop)

    [/autoit]
  • bei FTP_Ex brauchst du DLLopen nicht mehr machen.

    Und was das mit dem passiv angeht: den Parameter hab ich hinzugefügt, in der originalen FTP.au3 ist der nicht enthalten. Da kommt direkt der Port.