Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 01:57

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Aug 26, 2010 08:03 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich versuche gerade ein Dateisyncronisierungstool zu schreiben.

Ich hab Dateien in Ordner A und möchte diese auch in Ordner B haben.
Sobald sich was auf A Verändert muss die veränderung auch auf B übernommen werden und umgekehrt.

Eine Syncronisierung bzw. Spiegelung halt.



Jetzt ist da meine Frage, wie reallisiert man eine Richtige Syncronisierung ohne Events nutzen zu können.
Ich kann lediglich jede Datei/Ordner auslesen/herunterladen.



Ich hätte das erstmal so gelöst das ich alle Dateien/Ordner von "Ordner A" nach "Ordner B" kopiere die noch nicht existieren oder bei denen die Grösse nicht mehr stimmt.

Danach würde ich den Umgekehrten weg, Dateien/Ordner von "Ordner B" nach "Ordner A" machen.

Allerdings stellt sich dann die Fragen wie kann ich eine Löschung erkennen ? oder eine Änderung der Datei ?

Nach diesem Prinzip hätte Ordner A eine höhere Priorität als Ordner B.



Ich dachte als nächstes wäre so eine art "Syncronisierunstabelle" im form einer versteckten XML Datei auf beiden seiten gut. Aber wüsste aktuell nicht wie ich das umsetzten soll.

Hätte da jemand eine Idee wie man das geschickt lösen kann ?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 26, 2010 08:42 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ein Kumpel von mir hat für sowas einfach SVN in seine Anwendung integriert.
Zum Abgucken könnte es aber auch helfen einmal nach Open Source File Synchronization Projekte zu suchen. Da gibts wohl einiges.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 26, 2010 08:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ein Kumpel von mir hat für sowas einfach SVN in seine Anwendung integriert.

Ich würde sagen das sich hier GIT besser eignet, da es kein zentrales Repository erfordert. Allerdings behalten sowohl GIT als auch SVN sämtliche Versionen einer Datei bei, was ja hier glaube ich nicht gewünscht wird.

Zitat:
Ich hätte das erstmal so gelöst das ich alle Dateien/Ordner von "Ordner A" nach "Ordner B" kopiere die noch nicht existieren oder bei denen die Grösse nicht mehr stimmt.

Also da Dateien auch bei gleicher Größe verschieden sein können ist das vielleicht kein so gutes Kriterium. Ich würde vorschlagen die Zeitstempel der Dateien zu benutzen. Allerdings kann man sich auch auf diese leider nicht verlassen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 26, 2010 09:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Apr 09, 2009 12:51
Beiträge: 53
Programmiersprache: Lazarus
Finalspace hat geschrieben:
Jetzt ist da meine Frage, wie reallisiert man eine Richtige Syncronisierung ohne Events nutzen zu können.

Wer sagt, dass es keine Events gibt? :lol:
Hier wurde mal speziell dafür etwas gebaut. Dürfte spitze für ein Sync-Tool sein.
Ich weiß jetzt nicht wie hacky das ist, aber es ist bestimmt besser als andauernd unperformant das ganze Dateisystem durchzupollen... :shock:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 26, 2010 11:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ka, was du unter Events verstehst, daher einfach mal eine Lösung die keine sein kann ^^.

Um auf änderungen zu reagieren nutzen tools wie dropbox inotify für linux und FindFirstChangeNotification für windows.
Du registrierst ein Handler und wirst dann vom OS benachrichtigt bzw. kannst auch pollen.

SVN und co machen das passive, indem man beim commit ein hash von der überwachten file generiert und beim listen einfach die hashes aller files vergleicht.
Worüber die hashes laufen, weiß ich allerdings nicht, ich vermute über dateigröße, änderungsdatum und zusätzlich fileinhalt(ich kann mir nicht vorstellen, das jede files volständig gehashed wird, da es viel zu lange würde, eher hash von filesize und änderungsdatum prüfen und wenn die differieren filehash prüfen). Diese lösung verbraucht aufjedenfall mehr performance und braucht mehr code, als das Notification system von dem jeweiligen OS.

In C# mit .net kannst du so ein synctool in ca ner stunde mit gui komplett runter reißen, da schon alles als klassen und komponenten vorliegt.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]