ftp frage

  • soo und wieder eine frage^^

    auf nem ftp server liegen paar datein, die würde ich gerne mit autoit prüfen ob sie älter oder neuer sind als die auf dem pc...sprich wenn die auf dem pc geändert worden sind sollen die geänderten hochgeladen werden....ich weiß das geht mit anderen porgrammen aber ich brauche es in autoit...

    _inetgetsource geht ja nicht und filegettime mit der url funktioniert auch nicht, besteht da überhaupt die möglichkeit?...man könnte eigentlich ja auch eine ini mit hochladen wo die attribute vom letzten hochladen drinne stehen, aber das is halt sehr aufwendig

  • Na ja, mir fallen jetzt 2 möglichkeiten ein:

    1.: Die Datei runter laden und Datumvergleichen

    2.: Auf dem server einen Dienst staraten der in ner Ini od so immer die Daten der letzten Aktualisierung hinschreibt, und dann einfach die runter ladne und vergleichen, glaube das wird das einfachste sein.

    Mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • na ja der dienst für den server is nicht so komliziert

    und der Teil zum vergleichen is auch kein großes Problem.

    Wennst noch irgedwo probleme hast meld dich halt

    Computers are like Airconditioning. They don´t work with open Windows.

  • Schau mal in der FTP_EX udf nach _FTPFileTimeLoHiToStr()
    Damit lese ich das Datum der Datei in dem FTP-Verzeichnis, wenn die lokale Datei jünger ist, wird upgeloadet.

  • die hatte ich vorhin mal gesehen aber ich blick die net...da wird doch garnicht gefragt welche datei geprüft weren soll nur irgenwie hiword und loword oder so rein

    kannst du mir da bitte bitte mal ein beispiel dafür machen^^

  • hab nur was aus einem meiner Scripte rauskopiert, musst halt die Daten bissl anpassen

    Spoiler anzeigen
    [autoit]

    Func _checkfornewversion() ; existiert eine neue version von easyupload?

    Local $search, $ftpOpen, $ftpConnect, $handle, $DllRect, $FileInfo, $delsuccess

    $err = 0
    $ret = 0
    $temp = @ScriptDir & "\easyupload.old"
    $new = @ScriptDir & "\easyupload_new.exe"
    $current = @ScriptDir & "\easyupload.exe"

    GUICtrlSetState($label8, $gui_show) ;anzeigen, dass die neueste Version von easyupload gesucht wird

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

    $pingtime = Ping($autoupdateservername, 1000)

    ;msgbox(0,"",$pingtime)

    If $pingtime <> 0 Then ;server ist online


    $ftpOpen = _FTPOpen("Erdnuckel") ;irgendwas reinschreiben
    If @error Then
    MsgBox(0, "Fehler", "FTP-Handle wurde nicht erfolgreich erzeugt!" & @CRLF & "Programm wird beendet")
    Exit
    EndIf

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

    $ftpConnect = _FTPConnect($ftpOpen, $autoupdateservername, $autoupdateuser, $autoupdatepass)
    If @error Then
    MsgBox(0, "Fehler", "FTP-Connect zu " & $autoupdateservername & " war nicht erfolgreich. Die neueste Programmversion kann nicht geladen werden!")
    $err = 1
    Exit
    EndIf

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

    _FtpSetCurrentDir($ftpConnect, $autoupdateverzeichnis_server)
    If @error Then
    MsgBox(0, "Fehler", "Das Verzeichnis " & $autoupdateverzeichnis_server & " auf dem Server konnte nicht geöffnet werden.")
    $err = 1
    Exit
    EndIf
    ;msgbox(0,"fehlercode","error="&@error)
    If $err = 0 Then ; bisher ist kein ftp-fehler aufgetreten, datums und zeitvergleich, dann download
    ;msgbox(0,"","erdnuckelserver")
    Dim $handle
    Dim $DllRect
    $FileInfo = _FtpFileFindFirst($ftpConnect, "easyupload.exe", $handle, $DllRect) ;datei auf dem server
    If @error Then
    $err = 1
    MsgBox(0, "Fehler", "Die Datei Easyupload.exe konnte nicht vom Server geladen werden.")
    EndIf

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

    If $err = 0 Then ;datum vergleichen und ggf downloaden
    ;MsgBox(0, "Find", $FileInfo[1] & @CR & $FileInfo[2] & @CR & $FileInfo[3] & @CR & $FileInfo[4] & @CR & $FileInfo[5] & @CR & $FileInfo[6] & @CR & $FileInfo[7] & @CR & $FileInfo[8] & @CR & $FileInfo[9] & @CR & $FileInfo[10])
    $date_serverfile = filedatenumber(_FTPFileTimeLoHiToStr($FileInfo[6], $FileInfo[7])) ;datum serverfile
    $date_localfile = Number(FileGetTime($current, 0, 1)) ;datum local file
    ; msgbox(0,"daten","server- "&$date_serverfile&@crlf&"lokal- "&$date_localfile,2)
    If $date_serverfile > $date_localfile Then ; wenn datei auf server jünger ist...
    $info = MsgBox(4, "Hinweis", "Es gibt eine neue Version von EasyUpload. Wollen sie die neue Version herunterladen?")
    If $info = 6 Then
    GUICtrlSetData($Label1, "Download von: ")
    GUICtrlSetData($Label2, $autoupdateservername & $autoupdateverzeichnis_server & "\Easyupload.exe") ;link ins fenster schreiben
    GUICtrlSetData($Label3, "nach: ")
    GUICtrlSetData($Label4, $current) ;Dateinamen ins fenster schreiben
    GUICtrlSetData($Label5, " ")
    GUICtrlSetData($Label6, " ")
    $begin = TimerInit() ; timer initialisieren für anzeige geschwindigkeit kb/sec
    $currentfilesize = $FileInfo[9] / 1000 ;dateigröße für anzeige kb/sec
    _FTP_DownloadProgress($ftpConnect, $new, "easyupload.exe", "_UpdateParts") ;...downloaden in temporäre datei
    If @error Then
    MsgBox(0, "Fehler", "Fehler beim Download der neuesten Version von Easyupload.EXE!")
    If FileExists($temp) Then FileDelete($temp) ; tempdatei löschen
    Else
    ;RunWait(@comspec & " /c ren "&@scriptdir&"\easyupload.exe easyupload.old")
    ;RunWait(@COMSPEC & " /c ren "&@scriptdir&"\easyupload_temp.exe easyupload.exe")
    $ret = FileMove($current, $temp, 1) ;datei umbenennen
    If $ret = 0 Then MsgBox(0, "Fehler", "Fehler beim umbenennen von " & $current & " in " & $temp)
    $ret = FileMove($new, $current, 1) ;datei umbenennen
    If $ret = 0 Then MsgBox(0, "Fehler", "Fehler beim umbenennen von " & $new & " in " & $current)
    If $ret = 1 Then MsgBox(0, "", "Easyupload konnte sich erfolgreich updaten!")
    EndIf
    EndIf
    ;else
    ;msgbox(0,"Info","Sie haben die aktuelle Programmversion!")
    EndIf
    EndIf

    _FtpFileFindClose($handle, $DllRect)

    EndIf

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

    _FTPClose($ftpOpen)
    If @error Then MsgBox(1, "Fehler", "FTP-Verbindung konnte nicht getrennt werden.")
    EndIf


    EndFunc ;==>_checkfornewversion

    [/autoit]


    */EDIT/* hups, noch was vergessen....

    Spoiler anzeigen
    [autoit]

    Func filedatenumber($time) ;wandelt 23.04.2007 23:12:55 in 20070423231256 als zahl (kein string!)
    $numbertime = Number(StringMid($time, 7, 4) & StringMid($time, 1, 2) & StringMid($time, 4, 2) & StringMid($time, 12, 2) & StringMid($time, 15, 2) & StringMid($time, 18, 2))
    Return $numbertime
    EndFunc ;==>filedatenumber

    [/autoit]