Dateioperationen mit AutoIT

  • Hallo zusammen,

    ich bin noch relativ neu auf dem Gebiet AutoIT und hab bis jetzt viel mit probieren und
    durch Tutorials gemacht. Um Intallationen zu automatisieren gibt es jede Menge Tutorials.
    Das was ich machen möchte, geht allerdings in eine etwas andere Richtung und ich hab
    bis jetzt leider kaum brauchbare Tutorials oder Dokumentationen gefunden...

    Bsp: Ich möchte ein Skript, dass einen Ordner ständig nach einer Datei antriggert (Dateiname ist bekannt und immer gleich.).
    Wenn die Datei im Ordner "auftaucht", soll AutoIT warten, bis sie vollständig ist (wird per FTP in einen bestimmten Ordner übertragen)..
    Dann soll die Datei entpackt werden (ist ne ZIP). Als nächstes sollen die entpackten Dateien in einen anderen Ordner verschoben werden,
    wo sie dann von einem anderen Programm weiter verarbeitet werden.. AutoIT soll dann nur noch die zip Datei löschen..

    Einige Ansätze und Fragmente hab ich schon, allerdings fehlt mir noch der zündende Gedanke.

    Daher meine Frage:
    Gibt es nützliche Tutorials oder Dokus die mir mein Vorhaben erleichtern könnnten?
    Oder habt ihr irgendwelche Ideen/Vorschläge?

    • Offizieller Beitrag

    Um zu wissen ob sie vollständig geladen ist, kannst du die Dateigröße mit FileGetSize() abfragen. Dazu mußt du natürlich vorab wissen, welche Dateigröße geladen wird.
    Eine andere Variante wäre, dass der Sender nach Abschluß der Übertragung eine leere Textdatei mit dem Namen 'done.txt' schickt. Deren Existenz erfragst du und wenn sie vorhanden ist kannst du die Verarbeitung starten.

    Spoiler anzeigen
    [autoit]

    While 1
    Sleep(100)
    If FileExists('...\done.txt') Then _Verarbeitung()
    Wend

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

    Func _Verarbeitung()
    FileDelete('...\done.txt')
    ; ...entpacken
    ; ...verschieben
    ; ...ZIP löschen
    ; ? Exit um Programm zu beenden, ansonsten wartet die Schleife auf die nächste '...\done.txt'
    EndFunc

    [/autoit]


    FileMove() und FileDelete() benötigst du. Zum automatisierten Entpacken bemühe mal die Suche, da sind schon Bsp. vorhanden.

  • Hallo!

    hab da ne professionelle Lösung dazu, ich klappere 120 Ordner ab, in denen ne Applikation Dateien ablegt, ist die Datei dort, wird ne weitere Aktion gestartet.

    Für Deine Frage gibts jetzt mehrere Ansätze:
    a, hat die Datei, wenn der FTP-Server noch aktiv ist (wird vom FTP-Client noch "beschrieben" wirklich schon den fertigen Namen??
    b, mit autoit kann ich nach ne bestimmten Datei suchen und sagen: du darfst erst weitermachen, wenn die letzte Zugriffszeit > 20 Sekunden ist (ist auf Terminalserverfarmen dringends anzuraten)
    c, mit unzip -l (und Fehlercode abfragen) kannst Du feststellen, ob die Datei enzippbar ist (wenn ja, nochmals 5 Sekunden warten und dann weiterverarbeiten

    Version b ist bei mir und div. Multiserverkunden (=Applikation auf mehreren Servern verteilt) im Einsatz und es
    läuft richtig gut.

    Schau Dir aber auch mal Version a in der Praxis an.

    Bei Interesse an B, helf ich Dir mit nem kleinen Beispiel

    Gruss

    German