-Hilfe- Wininet.dll und FTPFileOpen

  • Mein Ziel ist es mit FileOpen und später InternetWrileFile eine Datei auf meinem ftp Server zu uploaden.
    Dazu benutze ich die ftp.au3 von wouter http://www.autoitscript.com/forum/index.php?act=attach&type=post&id=3314
    Um auf meinen ftp Server zu connecten das funktioniert auch alles...
    Auch wäre es möglich meine Datei mit _FTPPutFile zu uploaden jedoch wartet autoit immer bis die datei komplett hoch geladen ist und ich bekomme keine Rückmeldung wie weit er mit dem Upload ist.

    Das Problem liegt an meiner _FTPFileOpen Funktion, welche mir immer 0 zurück gibt!
    MSDN reference: http://msdn.microsoft.com/en-us/library/aa384166(VS.85).aspx

    [autoit]


    #include "FTP.au3"

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

    Func _FTPFileOpen($l_FTPSession, $RemoteFile, $AccessType = 0x40000000)
    Local $ai_FTPGetSizeHandle = DllCall('wininet.dll', 'int', 'FtpOpenFile', _
    'long', $l_FTPSession, _ ;hconnect
    'str', $RemoteFile, _ ;lpszFileName
    'long', $AccessType, _ ;dwAccess
    'long', 0x04000002, _ ;dwFlags
    'long', 0) ;dwConntext

    If @error OR $ai_FTPGetSizeHandle[0] = 0 Then
    SetError(-1)
    Return 0
    EndIf

    Return $ai_FTPGetSizeHandle[0]
    EndFunc

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

    $dllhandle = DllOpen('wininet.dll')
    $ftpsrv = "XXXXXX"
    $ftpuser = "XXXXX"
    $ftppass = "XXXXX"
    $ftpsession = _FTPOpen("MyFtpClient")
    $ftpconnection = _FTPConnect($ftpsession, $ftpsrv, $ftpuser, $ftppass, 0, 1, 0x08000000)
    $ftpopenfile = _FTPFileOpen($ftpconnection, "test.txt", )
    MsgBox(0,"",$ftpopenfile)
    _FTPClose($ftpsession)
    DllClose($dllhandle)

    [/autoit]

    Freue mich über jede Art von Hilfe :thumbup:

    hivefish

  • Hi,


    ich hatte das Problem auch schon mal, bei mir hat das teilweise funktioniert, bei meinem Kunden nirgends.

    Ich habe jetzt einfach vor dem FileOpen einfach ein Get IP eingebaut.

    $myIP = _GetIP()

    Frag mich nicht warum, damit hat's aber dann immer funktioniert. Das einzige Problem ist, wenn jemand in der IP Konfiguration seines Rechners ein Standard Gateway hat welches nicht erreichbar ist bleibt das script ziemlich lange stehen biss ein Timeout kommt, dann geht's aber auch weiter.

    Vielleich hilft dir auch ein anderer Befehl der irgendwas in der Wininet32 anstößt, eventuell ein InetGetSize könnte auch gehen.


    Schöne Grüße Rabbit