Prozess mittendrin abgebrochen, später fortsetzen



  • Guten Morgen,

    Ich habe folgendes Problem. Eins vorweg ich will keinen Code als Lösung oder Ähnliches, nur ein paar Denkanstöße.
    Es wird ein externes Programm aufgerufen, welches Dateien (*.cs Files) von einem Server auf meinen lokalen PC kopiert, dies nimmt meistens mehrere Stunden in Anspruch. Nun kann der Fall eintreten das mein PC/Programm unerwartet beendet wird und das externe Programm abbricht.
    Ich möchte gerne jetzt an meinem letzten Abbruchpunkt fortsetzen.
    Wie gehe ich da am besten vor?
    Jetzt kann einer sagen "ja du trottel, dann überprüfe doch welche Dateien du schon kopiert hast und setze dann dort fort..." Nein ich möchte das Problem gerne anders lösen.
    Vielen Dank für jede konstruktive Hilfe.

    MfG



  • Eine Möglichkeit wäre, eine Art Datenbank anzulegen, in der du die zu kopierenden Dateien erfasst. Nach dem Kopieren einer Datei setzt du den Eintrag auf abgeschlossen. - So kannst du nach dem Start genau da weiter machen wo abgebrochen wurde.

    Das beudeted allerdings, dass du vor dem tatsächlichen kopieren schon einmal alle Dateien durchgehen musst und die Datenbank aufbauen musst.

    Vom Grunde her also folgender Ablauf:

    Programmstart
        Prüfung Datenbank
            => Unbearbeitete Datensätze vorhanden?
                 => Gehe zu Verarbeitung
            => Aufbau Datenbank
                => Quellpfad Dateiweise durchgehen
                => Je Datei Datenbankeintrag hinzufügen (Informationen: Dateipfad)
                => Gehe zu Verarbeitung
    
       Verarbeitung:
            => Abrufen aller nicht fertiggestellten Datensätze
                => Iteration und Kopieren der Dateien
                   => Markierung kopierte Datei als abgeschlossen
    


  • Guest01 schrieb:

    Jetzt kann einer sagen "ja du trottel, dann überprüfe doch welche Dateien du schon kopiert hast und setze dann dort fort..."

    Ich hätte es höflicher formuliert 🙂

    Guest01 schrieb:

    Nein ich möchte das Problem gerne anders lösen.
    Vielen Dank für jede konstruktive Hilfe.

    Die Frage ist: wieso? Also warum willst du es anders lösen/welchen Vorteil erwartest du dir davon?
    Diese Fragen sind IMO wichtig um sinnvoll helfen zu können.



  • Erstmal danke für die Antworten.
    @inflames2k
    Das mit der Datenbank, hört sich gut an.
    Danke dir.

    @hustbaer
    Die *.cs Files werden von einen TFS Server geholt. Die Dateien befinden sich an den unterschiedlichsten Stellen auf meinem lokalen Rechner, je nachdem welche aktualisiert werden sollen. Teilweise haben die eine tiefe Ordner-Hierarchie, um da dann die "richtigen" herauszupicken erscheint mir recht komplex, außer ich habe jetzt einen Denkfehler drin 🙂
    Der Vorteil wäre darin, das ich dann an der "richtigen" Stelle fortsetze oder fehlerhafte Dateien (Abbruch während des Kopiervorgangs) ersetze und dann weiter mache.

    Ich habe da an sowas gedacht... Es wird ein "Kopier-Programm" aufgerufen und ich überwache den Prozess, sobald dieser Prozess abgebrochen wird soll mein "Haupt-Programm" mitbekommen wo und wann es abgebrochen wurde. Vielleicht sowas wie ein ExitCode mit zusätzlichen Rückgabewerten.

    Danke schon mal für eure Arbeit.

    MfG



  • Naja...
    Es gibt halt etliche "Sonderfälle" zu bedenken.
    Was wenn die lokalen Files zwischen Abbruch und Neustart nochmal modifiziert wurden?
    Was wenn die remote Files zwischen Abbruch und Neustart nochmal modifiziert wurden?
    Alles in allem recht lästig wenn man das mit einem "merken was schon gemacht wurde" Ansatz so hinbekommen will dass alle Sonderfälle abgedeckt sind.

    Beide Fälle lassen sich allerdings schön abdecken wenn man folgendes macht, was IMO auch "die Standardlösung" für dieses Standardproblem ist:

    1. List aller remote Files (inklusive Grösse und Änderungsdatum) vom Server holen
    2. List aller lokalen Files ermitteln (ebenso inklusive Grösse und Änderungsdatum)
    3. Unterschiede ermitteln
    4. Überflüssige Lokale Files löschen
    5. Files mit unterschiedlicher Grösse oder Änderungsdatum neu herunterladen

    Bei (5) musst du dann nur sicherstellen dass das Änderungsdatum der lokalen Files dem am Server entspricht. Das machst du indem du das Änderungsdatum explizit überschreibst nachdem du kopiert hast.



  • @hustbaer
    Danke für deine Antwort, damit werde ich erstmals beschäftigt sein das richtig und effizient umzusetzen 🙂

    MfG


Anmelden zum Antworten