Dateisynchronisation

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von sandiro.

    Dateisynchronisation

    Hallo,

    Ich habe meine Dateien (Schule) auf dem USB-Stick gespeichert, damit ich die Dateien in der Schule dabei habe.
    Zu Hause habe ich die Dateien jedoch auf der Festplatte gespeichert, da dies auf dem USB-Stick zu langsam ist.

    Wenn ich nun in der Schule Änderungen mache (Datei bearbeiten, neu erstellen, löschen) muss ich die entsprechenden Dateien zu Hause vom Stick auf den Computer kopieren, bzw. wenn ich zu Hause arbeite muss die die Dateien noch auf den Stick kopieren -> manuell ist dies allerdings mühsam...

    Ich möchte nun ein Programm erstellen, welches die beiden Pfade per Mausklick abgleicht (also nicht unbedingt automatisch), weiss aber nicht genau, wie ich dies machen soll:

    1. FileSystemWatcher
    Mit einem FileSystemWatcher könnte ich theroretisch die beiden Pfade überwachen, die Ereignisse in einer Datei abspeichern und dann auf Mausklick synchronisieren. Das Problem dabei ist, dass die Anwendung die ganze Zeit im Hintergrund laufen müsste - zu Hause kein Problem, in der Schule allerdings schon.


    2. Geänderte Daten
    Ein Programm welches alle Ordner durchläuft und dann die Daten anhand des Änderungsdatums kopiert,
    funktioniert leider auch nicht: wird eine Datei gelöscht, würde sie vom anderen Pfad wieder kopiert, anstatt dass die zweite Datei auch gelöscht wird.

    3. Information in Datei abspeichern

    Meine dritte Idee war, in jedem Ordner eine XML-Datei (oder so) abzuspeichern, in welchem die im Ordner enthaltenen Dateien angegeben werden (bei beiden Pfaden). Existiert eine Datei die in der XML-Datei angegeben ist nicht mehr, wurde sie (logischerweise) gelöscht und muss somit beim zweiten Pfad auch gelöscht werden (und dann auch in der XML-Datei). Das Problem dabei ist, dass wenn ein Ordner der bei beiden Pfaden existiert, gelöscht wird,
    weiss die Anwendung nicht, dass der Ordner gelöscht wurde und kopiert ihn vom anderen Pfad wieder.

    Ich müsste die Information (XML-Datei) also irgendwie extern abspeichern, damit die Informationen erhalten bleiben...

    Wie mache ich dies am besten? Oder gibt es eine bessere Möglichkeit?
    (Ich möchte nicht fertigen Code, sondern nur Ideen, wie ich dies realisieren könnte...)

    Schon mal Danke für die Ideen :)

    Gruss
    sandiro
    Ich dachte grade spontan an so eine Art FAT. File Allocation Table.
    Du lässt ein Programm über deine Ordner laufen, das stellt fest, wann
    die Files geschrieben wurden. Das machst du vor und nach der Schule,
    zuhause. Dadurch kannst du unterscheiden ob die Files von zuhause
    sind oder von der Schule. Das schreibst du dann auch in diese Datenbank.
    Erst mal danke für deine Idee,
    ich verstehe allerdings noch nicht ganz, wie du dies meinst;

    Ich habe dann eine Datenbank mit allen Dateien-Erstellungsdatum von zu Hause,
    und eine Datenbank (bzw. eine andere Tabelle), mit den Dateien (Erstellungsdatum) von der Schule

    Wenn ich dann aber eine Datei lösche, wird diese ja trotzdem wieder kopiert? (Oder verstehe ich was falsch)

    Gruss
    sandiro
    Du wirst schon noch einige zusätzliche Daten in die Datenbank schreiben müssen.

    Erstellt Pfad,von, am...
    Gelöscht Pfad,von, am...
    Geändert Pfad,von, am...

    Dann musst du das alles logisch verknüpfen, so wie du es dann konkret haben willst.

    Du kannst ja natürlich auch das Programm auf dem Stick installieren und zusätzlich in der Schule
    starten.
    Ich habe mal folgendes Überlegt;

    - Alle Dateien werden in einer Datenbank mit erfasst, mit dem Namen, einem Status (Deleted=True/False) und dem aktuellen Datum erfasst
    - Bei Dateien welche bereits vorhanden sind, wird einfach das Datum aktualisiert
    - Dann geht das Programm in der Datenbank alle Dateien durch, welche nicht das aktuelle Datum haben,
    und setzt dort den Status auf "Deleted = True" (würde die Datei noch existieren, wäre das aktuelle Datum gesetzt)

    - Dann geht das Programm den ersten Pfad durch und überprüft, ob eine Datei neuer ist, als die gleiche Datei auf dem anderen Pfad
    - Ist dies der Fall, wird die Datei kopiert
    - Ist die Datei auf dem anderen Pfad nicht vorhanden, wird in der Datenbank überprüft, ob dort die Datei vorhanden ist
    - Falls nicht, wird sie kopiert, falls schon, wird der Status "Deleted" angeschaut (dieser müsste dann eigentlich true sein)
    - ist dieser true, wird die Datei auf dem ersten Pfad auch gelöscht

    - Dann erfolgt das gleiche noch mit dem zweiten zum ersten Pfad

    - Das Änderungsdatum (bzw. Kopierdatum) kann auch in der Datenbank erfasst werden...

    Gruss
    sandiro
  • 2 Benutzer haben hier geschrieben