Warten bis eine Datei vollständig kopiert wurde

  • Ja moin,

    ich habe ein Script geschrieben das ein Verzeichnis überwacht. Wenn dort eine neue Präsentation reinkommt, wird die aktuelle Präsentation (die gerade läuft) gestoppt und die neue Präsentaion in das Verzeichnis RUN verschoben und gestartet.
    Nun mein Problem. Das kopieren der neuen Präsentation auf den Rechner dauert bei uns schon mal 5-10 Minuten.
    Wie bring ich AutoIt denn bei das er warten soll bis die Datei ganz kopiert wurde. Ich habs mit sleep versucht, ist aber die schlechteste Lösung.
    Momentan fängt er dann irgendwann an, kann die Datei nicht verschieben und hängt sich auf.

    Gruß
    Sebastian


    Einmal editiert, zuletzt von Sebastian (2. Februar 2012 um 17:19)

  • kannst du vll die dateigröße auslesen und falls diese nicht mehr wächst erst anfangen zu kopieren?

  • War auch mein erster Ansatz, hat aber nicht funktioniert.
    Ich hab die Dateigröße in einer Schleife ausgelesen, 10 sec. gewartet und dann mit dem nächsten Wert verglichen.
    C:\Praesentationen\Praesentation.ppt
    45107200
    45107200
    Programm stoppenC:\Praesentationen\Praesentation.ppt
    45107200

    Es wird ab der ersten sekunde die volle Dateigröße zurückgegeben.

    Einmal editiert, zuletzt von Sebastian (22. Dezember 2011 um 17:35)

  • ich hoffe ich habe deinen wunsch richtig interpretiert und werfe mal folgendes in den raum:

    versuch doch eine art lokalen download zu machen

    [autoit]

    InetGet

    [/autoit]

    dort sind die pfad anfangen in dem fall halt nicht http:// sondern file://

    und bekanntlich kann man bei InetGet ja abfragen wie weit der transfer ist


    mfg
    sgtigram

  • Hatte bzw. habe im Prinzip das selbe Problem in einem meiner Scripte. Bei mir kommen die neuen Dateien per FTP an, auch hier scheitert die eigentlich sinnvollste Lösung die Dateigröße in gewissen Intervallen auf Größenveränderung zu prüfen um herauszufinden wann die Datei komplett ist und weiterverarbeitet werden kann. Ich habe das dann bei mir gelöst indem ich die Logdatei des FTP Servers überwache und dadurch dann den genauen Zeitpunkt kenne wann der Dateitransfer abgeschlossen ist. Vielleicht ist das ja auch ein Lösungsansatz für dich, jenachdem wie die Daten auf dem Zielrechner ankommen. Noch besser wäre es natürlich wenn dein Script die Möglichkeit hätte die Datenquelle zu überwachen und den Download auf den lokalen Rechner selbst übernehmen könnte, denn dann hast du etwas mehr Kontrolle und Möglichkeiten den Transfer zu überwachen. (siehe auch das Posting von SgtIgram)


    EDIT:

    Sollten die obigen Workarounds keine Alternative für dich sein kommt evtl noch das Dateiänderungsdatum als Überwachungskriterium in Frage. Allerdings kann es auch hier vorkommen, dass die Datei nur in sehr großen Abständen beschrieben wird, weil Windows oder das Programm welches den Download übernimmt mit einem Schreibcache arbeitet und die Datei nicht sofort aktualisiert.

    2 Mal editiert, zuletzt von misterspeed (22. Dezember 2011 um 18:10)

  • Hast du auch Einfluss auf die Seite, die die Präsentation erstellt? Dann könntest du nach der Präsentation eine zweite Datei kopieren. Erst wenn diese vorhanden ist, wird dann die Präsentation gestartet.

  • Vielleicht wäre ein möglicher Lösungsweg auch, die betreffende Datei versuchen mit FileOpen() zum Schreiben zu öffnen.

    Solange die Datei nicht fertig geschrieben ist, sollte dies doch zu einem Fehler führen, oder ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Servous , also soltle es nicht gehen über FilegetSize die Größen zu vergleichen benutz doch RoboCopy.exe diese gibt dir einen Return sobald der Copy Vorgang abgeschlossen ist :)

    Gruß Marvin

  • @Protex: So etwas in der Art hatte ich auch erst gedacht - ist doch einfach, sogar die FileCopy()-Funktion beendet sich erst nach dem Kopiervorgang.

    Aber: Er kopiert die Datei doch gar nicht im Script, sondern sie wird anderweitig erstellt und er weiß nicht wann sie komplett fertig kopiert ist. Außerdem ist es schwierig etwas mit FileGetSize() zu prüfen, wenn man nicht weiß wie groß es maximal wird !

    Oder hab ich das Script nun falsch interpretiert ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Sorry, war mal eben weg.
    Nun aber wieder zu meinem Problem.
    Ich denke FileOpen() is der richtige Ansatz. Ihr müsst euch immer vorstellen eure Mutter / Vater muss das ganze bedienen können.
    Der User speichert die Präsentation auf einer Verküpfung mehr kann ich dem nicht zumuten.
    Funktioniert eigendlich $status = FileMove($sPath & $aFiles[1], $sPath &"RUN\"& $aFiles[1]) ??

    Gruß
    Sebastian

  • Zitat

    Servous , also soltle es nicht gehen über FilegetSize die Größen zu vergleichen


    Bin mir nicht sicher ob es an dd für win lag aber ein Unterchied von xp zu win7 war das bei XP die Datei gewachsen ist (in Kb) und
    bei Win7 war die Datei 0K groß und bei Fertigstellung hatte diese die komplette Größe.
    So konnte ich es dann für progress nicht mehr gebrauchen. :cursing:

    Gruß N!ce

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Moin That´s my way.
    Danke für die Hilfe
    Sebastian

    [autoit]


    $completeFile = FileOpen($sPath & $aFiles[1], 1)
    ConsoleWrite($completeFile & @CRLF)
    If $completeFile = 1 Then
    FileClose($completeFile)
    ...
    EndIf

    [/autoit]
  • Hatte ähnliches Problem.

    Unsere Lösung ist es die Prüfbarkeit der FILECOPY/FILEMOVE Funktion zu nutzen z.B.:

    While Not Filecopy(x,y)

    Sleep(ein bisschen)

    WEnd

    Wenn der ext. Kopiervorgang noch nicht abgeschlossen ist wird der von autoit eben solange versucht bis er funzt.

  • Der Beitrag ist bereits über 14 Tage gelöst !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"