Hi Leute, ich arbeite zur Zeit an einem Dämon, der erkennt wenn neue Files in einem Ordner angekommen sind, diese dann bearbeitet und verschiebt. Alledings habe ich folgendes Problem. Wenn jemand eine große Datei in diesen Ordner Kopiert erkennt der Dämon diese und Bearbeitet sie (schreibt sie in die Datenbank) obwohl sie noch nicht fertig kopiert ist! Gibt es ein sicheres Verfahren wie ich herrausfinden kann ob ein File komplett ist? Vielen Dank!
ich würde mal sagen du müsstest definieren was fertig bedeutet.
Definiere dir doch einfach eine zeichenfolge die nicht in deinem Text vorkommen kann als ende. wenn der demon die dann findet weiss er ob fertig geschrieben wurde. Wenn du nicht ausschliessen kannst das die zeichenfolge trotzdem in deinem text vorkommen kann musst du einfach einfach immer eins der zeichen doppelt einfüegen und dann beim einlesen das doppelt eingelesene entfernen. Ist das zeichen dann nicht doppelt weisst du das es eine endsequenz ist -- ...fleißig wie zwei Weißbrote
Nette Idee. Leider handelt es sich im Images die in den Ordner Kopiert werden. Dieses geschieht vom User und der soll nur die Datein in einen Ordner Kopieren. Der Dämon soll dann automatisch alles weitere mache, jedoch erst wenn die Datein fertig kopiert sind.
Programmablauf ist wie folgt: 1.Ich hole mir eine Liste mit den Filenames aus dem Ordner 2.Ich arbeite die Liste in einer Schleife ab.
Das Problem ist das Windows als auch Mac die Files anlegt und dann Byteweise auffühlt. Ich habe den Namen also in meiner Liste obwohl der Fiele ewentuell noch nicht fertig kopiert ist.
was ist denn wenn du einfach wenn der demon ein neues File entdeckt ein saftiges Sleep von 20 secunden machst oder wie lange auch immer die übertragung im schlechtesten fall dauert -- ...fleißig wie zwei Weißbrote
Hab ich mir auch schon gedacht, ist aber zu unsicher. Die Files können ja auch aus dem Netzwerk kommen und wenn mann z. B. Files von einem Mac auf einen Windowsrechner Kopiert legt der Mac erst DIE DATEIN an und füllt dann erst jede einzelne auf! Dann ist es mit einem Sleep nicht mehr getan! Gib es keine Classe oder funktion mit der man das Prüfen kann? Kann man nicht irgendwie prüfen ob sich die Datei im Zugriff befindet?