C# FileSystemWatcher-Und FTP -
Ich monitor Dateien gelöscht auf ftp via filesystem-watcher, dann wechseln Sie dir. Jetzt habe ich trigger die Kopie aus der Veranstaltung erstellen der filesystem-watcher, aber offensichtlich im Fall von ftp erstellen ist nur ein stub-Datei und die Daten kommt und füllt die Datei-uploads bis zum Abschluss. Jemand eine elegante Lösung dafür, oder muss ich tun, was ich glaube, ich habe zu tun
1 wait till last access time is about n ms in past before I copy
2 throw a control file in there to state that that file is done being copied, then delete control file
3 pound the crap out of it
Du musst angemeldet sein, um einen Kommentar abzugeben.
dies ist eine sehr naive Implementierung, aber es passt für meine Zwecke, die ich gesehen habe genug Leute mit diesem problem im web, so entschied beitragen. Die Implementierung ist Recht spezifisch für meine Bedürfnisse, die ich fast völlig unbekümmert mit geänderten Ereignisse, die angesichts der Natur der mein problem aber die Leute werfen können Ihren eigenen code, wenn Sie brauchen, um etwas anders zu machen, es ist wirklich die erstellt, die Sie verursachen die meisten Probleme. Ich habe nicht vollständig getestet, aber zuerst zu schreiben es sieht gut aus
Warten Sie, bis Sie nur öffnen Sie die Datei - ich würde nicht so weit gehen zu sagen, dass es eine schöne Lösung, aber wohl die sicherste Strategie in den Umständen.
hier eine Implementierung zu synchronisieren
Wenn die Datei kopiert wird von einem anderen server per FTP, bevor die komplette Datei kopieren , Datei-Namen umbenannt wird mit extra Erweiterung wie .TMP, wie gezeigt, in die path-Beispiel unten.
C:\InterfaceServer\OilAndGas\XMLForTest\TestStbFile.xml.TMP
Diese situation zu überwinden, Folgen zwei Schritte
parameter enthält Datei-Namen mit dem Anhang zusätzliche Datei-Erweiterung
der name der Datei, wie es gerade kam in den Ordner und nicht abgeschlossen
mit copy-Vorgang.
Müssen Sie rufen Sie einfach den unten Verfahren für entfernen Sie die zusätzliche Erweiterung
hinzufügen und warten Sie für 2 Sekunden in den code, so dass die komplette Datei
wird erstellt und Sie können es verwenden, für die weitere Verarbeitung.
Den source laden Sie eine stub-Datei, die direkt nach der Daten-Datei abgeschlossen ist, und haben Ihre FileSystemWatcher Uhr für die stub-Datei. Zum Beispiel, wenn die Daten-Datei-name ist mydata_01234 dann die stub-woulb werden mydata_01234_stub. Die FileSystemWatcher-sollte dann eine Maske von "*_stub". Sie wissen dann, die Daten-Datei-Namen durch abstreifen der "_stub" - suffix. Und die stub-Datei kann nicht hochgeladen werden, bis, nachdem die Daten einer Datei abgeschlossen, so dass die Daten-Datei wird frei sein.
Wenn Sie die stub-Dateien sind nur ein byte, die Sie sollten in der Lage sein, um Sie zu entfernen, nach welcher operation Sie gerade durchführen, mit der Daten Datei, ohne Frage. Wenn Ihre Operationen sind besonders schnell, fügen Sie ein 100 ms sleep vor dem löschen der stub.
4 Jahre später....
den stub-Datei ist eine gute Idee, aber wahrscheinlich eine etwas robustere Art und Weise, es zu tun ist, um Ihre Quelle erstellen einer stub-Datei zuerst laden Sie Ihre "echte" Datei, dann löschen Sie die stub.