Filepointer auf "unfertige" Datei



  • soerenP schrieb:

    Ok. Danke. Wird mein Problem dann behoben?

    Nein, vermutlich nicht (höchstens schlimmer gemacht. Siehe mein Posting). Am besten koordinierst du dein Programm irgend wie mit dem FTP-Client. Aber das ist vermutlich sehr systemabhängig.



  • Und die Schreibzugriff-Anforderung wird mir auch nicht helfen?



  • 😮 , hatten wir nicht mal eine diskussion das ftell() nicht wie gewünscht funktioniert, wenn man die datei nicht im binär modus öffnet, da war nwp2 noch aktiv, irgendwie vermiss ich ihn ja? aber das mit dem fseek ist mir neu, naja man lernt ja nie aus 😉



  • Und die Schreibzugriff-Anforderung wird mir auch nicht helfen? 😉



  • Das Problem mit fseek war mir bisher nicht bekannt. Hast du da genauere Quellen zum nachlesen, oder eine etwas ausführlichere Antwort, wann und wieso da Probleme auftreten können? 🙂



  • Genmutant schrieb:

    Das Problem mit fseek war mir bisher nicht bekannt. Hast du da genauere Quellen zum nachlesen, oder eine etwas ausführlichere Antwort, wann und wieso da Probleme auftreten können? 🙂

    7.19.9.2 The fseek function schrieb:

    A binary stream need not meaningfully support fseek calls with a whence value of SEEK_END.

    aus dem ISO Standard.



  • aus der coder hölle schrieb:

    😮 , hatten wir nicht mal eine diskussion das ftell() nicht wie gewünscht funktioniert, wenn man die datei nicht im binär modus öffnet, da war nwp2 noch aktiv, irgendwie vermiss ich ihn ja? aber das mit dem fseek ist mir neu, naja man lernt ja nie aus 😉

    hehe, ja das stimmt. Wusste ich bisher auch noch nicht.

    7.19.9.4 The ftell function schrieb:

    The ftell function obtains the current value of the file position indicator for the stream
    pointed to by stream. For a binary stream, the value is the number of characters from
    the beginning of the file. For a text stream, its file position indicator contains unspecified
    information, usable by the fseek function for returning the file position indicator for the
    stream to its position at the time of the ftell call; the difference between two such
    return values is not necessarily a meaningful measure of the number of characters written
    or read.

    (ebenfalls aus dem ISO Standard)

    P.S. Vielleicht hat jemand Lust von euch darüber einen FAQ-Eintrag zu schreiben, warum das fseek/ftell-Duo keine gute Kombination ist :). So etwas sieht man ja öfters.



  • soerenP schrieb:

    Und die Schreibzugriff-Anforderung wird mir auch nicht helfen? 😉

    Ich interpretiere das als "NEIN"?



  • soerenPE schrieb:

    soerenP schrieb:

    Und die Schreibzugriff-Anforderung wird mir auch nicht helfen? 😉

    Ich interpretiere das als "NEIN"?

    Probiere es einfach aus. Das hängt halt von deinem System ab.



  • Eine einfache Möglichkeit wäre, das FTP-Skript so anzupassen, dass etwa statt

    put foo.txt
    

    folgendes verwendet wird:

    put foo.txt foo.txt.part
    rename foo.txt.part foo.txt
    


  • seldon schrieb:

    Eine einfache Möglichkeit wäre, das FTP-Skript so anzupassen, dass etwa statt

    put foo.txt
    

    folgendes verwendet wird:

    put foo.txt foo.txt.part
    rename foo.txt.part foo.txt
    

    Das hört sich gut an. Ich weiß aber nicht, ob ich darauf Zugriff habe... Ansonsten hilft wohl wirklich nur ausprobieren. Leider etwas mühselig und leicht gefährlich, da wir für diese Art Test irgendwie nur die Produktionsumgebung in Frage kommt 😞

    Vielen Dank aber und viele Grüße
    Sören



  • Leider ist nichts über den weiteren Hintergrund des Programms bekannt. Ansonsten wäre es vielleicht ja auch möglich, dass alle scheinbar fehlerhaften Dateien im Programm in eine interne Liste geschrieben werden. Diese Liste wird nach einer Pause erneut überprüft.

    Ansonsten finde ich die Lösung mit der zusätzlichen Datei sehr gut und sehe dort auch keine Probleme.



  • gfhgfhgfh schrieb:

    Leider ist nichts über den weiteren Hintergrund des Programms bekannt. Ansonsten wäre es vielleicht ja auch möglich, dass alle scheinbar fehlerhaften Dateien im Programm in eine interne Liste geschrieben werden. Diese Liste wird nach einer Pause erneut überprüft.

    Ansonsten finde ich die Lösung mit der zusätzlichen Datei sehr gut und sehe dort auch keine Probleme.

    Noch eine Ergänzung: Ich würde in die Liste die aktuelle Dateigröße und die aktuelle Zeit speichern. Wenn sich dann beim erneuten Überprüfen eine Differenz der alten Dateigröße zur neuen Dateigröße ergibt, dann verbleibt die Datei für einen weiteren Check in der Liste. Sollte sich dann nach einem bestimmten Zeitlimit keine Veränderung mehr einstellen, so wird angenommen, das die Datei fertig ist.



  • http://en.wikipedia.org/wiki/File_locking
    evtl. ist sowas nützlich, kommt aber ein bischen darauf an, bzw. ist es unportabel, auch müßte das ftp programm die datei "sperren" wenn es das nicht macht und du keinen zugriff auf den quelltext hast wirds schwer...



  • soerenP schrieb:

    seldon schrieb:

    Eine einfache Möglichkeit wäre, das FTP-Skript so anzupassen, dass etwa statt

    put foo.txt
    

    folgendes verwendet wird:

    put foo.txt foo.txt.part
    rename foo.txt.part foo.txt
    

    Das hört sich gut an. Ich weiß aber nicht, ob ich darauf Zugriff habe... Ansonsten hilft wohl wirklich nur ausprobieren. Leider etwas mühselig und leicht gefährlich, da wir für diese Art Test irgendwie nur die Produktionsumgebung in Frage kommt 😞

    Vielen Dank aber und viele Grüße
    Sören

    Tschuldigung, ich kenn mich mit dem FTP-Kram kaum aus... Müsste oben angegebenes Skript auf dem Client laufen, der sich auf meinem FTP-Server einloggt?
    Gnarrf, das dürfte sich etwas kompliziert gestalten, da die Clients 1. über ganz Europa verstreut sind, 2. keine herkömmlichen Computer sind, sondern eher was in Richtung "Embedded Systems" mit Firmware, die extra upgedated werden muss oder so 3. Daten über GPRS übertragen, wo die Datenmenge echt reduziert werden muss (und ich denke, ein weiterer FTP-Befehl wird da noch weiteren Overhead produzieren)
    Alles nicht so einfach. Hab erstmal "r+b" als option versucht, bis jetzt funktioniert es, aber die Fehlerkennung war ja auch nur einmal am Tag oder so... Muss man halt Pech haben für...

    Viele Grüße
    Sören


Anmelden zum Antworten