FTP - Dateien nicht erneut überschreiben/ Komplette Ordner hochladen

  • Hallo zusammen,
    ich hab mich mal mit Autoit beschäftigt, nunja ich sage mal, dass ich Grundkenntnisse habe.
    Frage_1:
    Was ich realisieren möchte:
    Bilder (.jpg / .jpeg) sollen auf einen FTP-Server hochgeladen werden, was auch kein Problem für mich darstellt.
    Jetzt sind dies viele Bilder und es kommen auch immer neue Bilder dazu.
    Ich habe einen Ordner "Bilder" auf meinem Rechner und einen Ordner "Uploaded_Pictures" auf dem FTP-Server. Diese beide Ordner möchte ich "syncron" halten.
    Das heißt, dass wenn neue Bilder im Ordner ...\Bilder sind, dass diese dann beim Aufruf des Scriptes hochgeladen werden.
    Jedoch möchte ich nicht, dass Alle Bilder, welche im Ordner ...\Bilder sind nochmals erneut hochgeladen werden, sondern nur die neuesten Dateien.
    Letztendlich möchte ich das Script beim PC-Start mitstarten lassen, welches dann "nur die neuesten Bilder" hochlädt.

    Hier der Teil des Scriptes welchen ich schon habe.

    [autoit]

    #include<ftpex.au3>
    $hFTP=_FTP_Open("Connection")
    $iCon=_FTP_Connect($hFTP, "Servername", "Benutzername", "Passwort")
    _FTP_FilePut($iCon, "D:\Bilder\Bild_1.jpg", "/Uploaded_Pictures/Datei_1.jpg")
    _FTP_FilePut($iCon, "D:\Bilder\Bild_2.jpg", "/Uploaded_Pictures/Datei_2.jpg")
    _FTP_FilePut($iCon, "D:\Bilder\Bild_2.jpg", "/Uploaded_Pictures/Datei_2.jpg")
    _FTP_Close($hFTP)

    [/autoit]

    Bei dem Konstrukt werden alle Bilder immer wieder hochgeladen und überschrieben.

    Frage_2:
    Desweiteren erstelle ich in diesem Ordner "Bilder" auch Unterordner".
    Diese sollen auch samt Dateien auch auf den FTP-Server hochgeladen werden.

    Ich hoffe man kann mir helfen.
    Falls Jemand fragen zu meinem Vorgehen hat, einfach fragen.

    Vielen Dank, schonmal im voraus

    Gruß
    Spritschlucker

  • Du kannst alle Lokalen Dateien auflisten mit

    [autoit]

    _FilelisttoArray

    [/autoit]


    Dann gehst du Datei für Datei durch und überprüfst, ob die Datei da ist, oder nicht

    [autoit]


    $List = _FilelisttoArray("Lokaler Ordner")
    For $i = 1 To List[0]
    _FTP_FileGetSize($Path &$list[$i])
    if @error THEN
    ;......UPLOAD.....
    EndIF
    Next

    [/autoit]

    Zu deiner 2ten Frage, BugFix hat mal eine Rekursive Suche gebastelt, such mal nach, der kann dir auch die Dateien in Unterordnern anzeigen

  • Danke für die Antwort, hat mir schonmal weitergeholfen.
    Jedoch kapiere ich nicht, wie ich nun das Array durchgehe und jede Datei überprüfe ob diese nun vorhanden ist oder nicht.

    [autoit]


    #include <File.au3>
    #include <Array.au3>
    $Path = "/Uploaded_Pictures" ; Pfad auf dem FTP-Server
    $FileList = _FileListToArray("D:\Bilder") ;Lokaler Pfad
    For $i = 1 To List[0]
    _FTP_FileGetSize($Path &$list[$i])
    if @error THEN
    _FTP_FilePut($iCon, "Datei(en)_aus_dem_Array_inklusive_Original_Dateinamen", "/ Uploaded_Pictures/Original_Dateinamen.jpg") ;Datei Upload
    EndIF
    Next
    MsgBox(0,"Status","Dateien wurden erfolgreich hochgeladen") ;Wenn alles fertig ist, dann soll diese MsgBox kommen

    [/autoit]

    Meine Frage nun:
    Was muss ich anstatt "Datei(en)_aus_dem_Array_inklusive_Original_Dateinamen" hinschreiben ?
    ...und mit was muss ich "
    Original_Dateinamen.jpg" ersetzen.

    Ich blicke da nicht ganz durch, wie ich da die Daten übergeben soll/ muss.

    Mfg
    Spritschlucker

  • Hallo SpritSchlucker,

    am einfachsten wäre es ja wenn deine Dateien auf dem Server genauso heisen wie lokal. Da du aber den komplizierteren Weg gehen willst musst da natürlich den Pfad anpassen. Dass kannst du ja mit StringReplace machen:

    [autoit]

    $sLPath = "D:\Bilder"
    $sRPath = "/Uploaded_Pictures" ; Pfad auf dem FTP-Server
    $aList = _FileListToArray($sLPath) ;Lokaler Pfad
    For $i = 1 To $aList[0]
    $sRemote = $sRPath & "/" & StringReplace($aList[$i], "Bild", "Datei")
    _FTP_FileGetSize($iCon, $sRemote)
    If @error Then _FTP_FilePut($iCon, $sLPath & "\" & $aList[$i], $sRemote) ;Datei Upload
    Next

    [/autoit]

    mfg autoBert