Client - Server, Dateivergleich

Ich habe vor ca. 16 Monaten mit der Hilfe von Rainer ein Tool zum Synchronisieren von Daten geschrieben. Wenn dieses Tool auf dem Laptop gestartet wird vergleicht es ca. 80.000 Dateien mit einem Netzlaufwerk. Neue oder Veränderte Dateien werden auf dass Laptop Kopiert. Vorher haben wir einmal im Monate den ganzen Ordner Kopiert…….bitte warte……
Also spart das Tool im vergleich zum kompletten Kopiervorgang eine menge Zeit, da die Dateien verglichen und nur wenn neu oder geändert kopiert werden.

Leider funktioniert das Tool nur im LAN und nicht über DSL, naja es funktioniert schon, dauert aber ganz schön lange. Darum habe ich mir Gedanken gemacht und möchte das ganze nun mit Hilfe eines kleinen Servers im Büro Optimieren.
Ich hoffe es ist wie Folgt realisierbar.

Auf dem Server wird ein kleines Programm alle 3 Stunden ausgeführt welches ein Index von dem Netzlaufwerk macht. Eine Liste mit allen Dateien , Pfad, Größe und Erstellungsdatum.

Nun gibt es ein 2tes Programm welches auf dem Laptop ausgeführt wird. Dort wird beim kopieren der Daten vom Server auch eine Dateiliste lokal angelegt und beim nächsten Programmstart mit der auf dem Server verglichen. So wird in wenigen Sekunden festgestellt welche Dateien neu auf dem Server sind ohne alle zu Vergleichen.

Auf dem Server werde ich einfach eine Rekursive Suche(API) auf bestimmt Ordner machen und diese in eine Datei schreiben. Nun kopiert sich der Client die Datei und vergleicht diese.
Nun die meine erste frage:

Wie vergleiche ich 2 text Dateien und Filtere die einträge raus die nicht in beiden Dateien vorhanden Sind ?

Oder gibt es eine bessere Lösung ?

Besten Dank, mfg Jonny

Hi Joe,

Wie vergleiche ich 2 text Dateien und Filtere die einträge
raus die nicht in beiden Dateien vorhanden Sind ?

Oder gibt es eine bessere Lösung ?

logisch, Datenbanken. Ein SQL-String liefert Dir das Ergebnis im Sekundenbruchteil.

Gruß, Rainer

Nabend Rainer,

wieso wusste ich nur das du sowas schreibst :stuck_out_tongue:
Aber du hast ja recht, man kann nicht ewig davon laufen…

Kannst du das ganze noch etwas ausmalen ?
Ich werde also einen Apache SQL Server installieren (Weil umsonst = legal) nun fülle ich die Datenbank mit den Ergebnissen der Rekursiven suche. So könnte ich ja auch für jeden benutzer ein Tabel anlegen und die Prüfung auch alle 3 Stunden machen. Das resultat schreibe ich wieder in eine neuen Tabel. Nun muss sich der Client mit dem Server (Datenbank) verbinden und die Kopieraufträge erfragen…

Ich werde erstmal Apache downloaden und melde mich später wieder.

Danke Dir,
mfg joe

Nabend Joe,

wieso wusste ich nur das du sowas schreibst :stuck_out_tongue:
Aber du hast ja recht, man kann nicht ewig davon laufen…

*gg* ich hoffe nur, ich schicke Dich da nicht aud die falsche Fährte. :smile:

Kannst du das ganze noch etwas ausmalen ?
Ich werde also einen Apache SQL Server installieren (Weil
umsonst = legal)

Apache ist eine Datenbank?
Egal, Du hast doch VB6, das einen Datenbankeditor enthält. Ich persönlich würde gar nichts weiter instellieren, VB6 nehmen und ein Datenbankformat verwenden, das VB6 mit ‚Bordmitteln‘ erstellen kann.

nun fülle ich die Datenbank mit den
Ergebnissen der Rekursiven suche. So könnte ich ja auch für
jeden benutzer ein Tabel anlegen und die Prüfung auch alle 3
Stunden machen. Das resultat schreibe ich wieder in eine neuen
Tabel.

Ja, jede Tabelle auf ihrem Computer.
Dann fehlt nur noch eine Abfrage, die alle Datensätze anzeigt, die unterschiedlich sind. Frag bitte nicht nach Code, ich sitze am Mac, habe kein VB. Mein Computer ist kaputt und meinem Konto geht es auch nicht besssser. :smile:

Gruß, Rainer

Der Mac stand noch im Keller ?
kk. Also werde ich mal schauen wie ich mit der such API die Datenbank fülle. Thx für den hinweis das ich keine extra tools brauche.

mfg joe

Nabend Joe und Rainer,

Sorry das ich mich wieder einmische :smiley:
Aber Alternativ haette ich noch ne andere Idee :wink:

Warum baut ihr nicht einen Server und einen Clienten? So wie es im Titel schon steht? Die Server Applikation läuft auf dem „Server“ der die Daten vergleicht! Die Clienten verbinden sich mit dem Server und stellen einen Request. Der Server sucht die Daten genuesslich und sendet sie den Clienten. Der wiederrum wertet diese aus und sagt dem „Server“ Du das und das willsch ham. Der Server sendet dann die Daten an den Clienten und volla das wars :smile:
Da es ja nicht unbedingt auf ein Bruchteil von Sekunden ankommt, bietet sich die Variante an! Vorteil ist. Keine Datenbank! Beide Proggis koennen auf einem Rechner erstellt werden! Nutzung ist via Inet und im LAN möglich!
Wenn man einmal dabei ist, kann man auch die Clienten untereinander verbinden und wenn ein Client die Daten schon hat, so kann er sie zum anderen senden. Das entlastet den Server.

Hört sich kompliziert an? Nein, ist es nicht, dank des Winsock *zwinker*
Pauschal würde ich mal in den Raum stellen, das das Vorhaben ohne grosses Bim Bam keine 10 Stunden dauert :wink:

MfG Alex

Hi Joe,

Der Mac stand noch im Keller ?

ne, ist geliehen. :smile:

Gruß, Rainer

Hi Alex,

Sorry das ich mich wieder einmische :smiley:

*gg* dake dafür! :smile:

Aber Alternativ haette ich noch ne andere Idee :wink:

Warum baut ihr nicht einen Server und einen Clienten? So wie
es im Titel schon steht? Die Server Applikation läuft auf dem
„Server“ der die Daten vergleicht!

Die Suche dauert etwas länger …

Die Clienten verbinden sich
mit dem Server und stellen einen Request. Der Server sucht die
Daten genuesslich und sendet sie den Clienten. Der wiederrum
wertet diese aus und sagt dem „Server“ Du das und das willsch
ham. Der Server sendet dann die Daten an den Clienten und
volla das wars :smile:

Wie ich es verstanden habe sollen die synchronisiert werden.
Wie nun schnell die Differenz erfahren, wer an wen Daten senden soll?
Wenn beide ihre Daten in eine Datenbank schreiben, geht das mit einem SQL-String doch recht schnell, oder? Wie sieht die Aöternative aus? Das wären dann doch Arrays. Wie stellst Du schnell die Differenz fest? Mir föllt da keine schnelle Routine ein.

Da es ja nicht unbedingt auf ein Bruchteil von Sekunden
ankommt, bietet sich die Variante an! Vorteil ist. Keine
Datenbank!

Das Serverprogramm durchsucht in Stunden die Verzeichnisse und wenn sich der Client anmeldet, soll der schnell synchronisiert werden. Wirklich ohne Datenbank? Du denkst mir immer zu kompliziert, da komme ich nicht mit. Ich brauche immer etwas länger, bis ich Dich verstsnden habe. Ich fürchte, Joe auch.

Beide Proggis koennen auf einem Rechner erstellt
werden! Nutzung ist via Inet und im LAN möglich!

Der Teil klingt gut. :smile:

Wenn man einmal dabei ist, kann man auch die Clienten
untereinander verbinden und wenn ein Client die Daten schon
hat, so kann er sie zum anderen senden. Das entlastet den
Server.

Ob das gebraucht wird? Muss Joe wissen.

Hört sich kompliziert an? Nein, ist es nicht, dank des Winsock
*zwinker*

Nö, Winsock war da schon klar. No Problem.

Pauschal würde ich mal in den Raum stellen, das das Vorhaben
ohne grosses Bim Bam keine 10 Stunden dauert :wink:

Dann bleib am Rohr, ich kann nicht helfen und klinke mich an der stelle aus. :smile:

Gruß, Rainer

Im Moment versuche ich noch eine Leer Datenbank in VB6 zu erstellen.
hier reicht doch eine „Data“ mit dem verweis auf eine leere Sql Datenbank plus ein Felxgrind damit ich auch was sehe oder ?

@Anno:
Ich fange mal hinten an. Clients untereinander verbinden wird nicht klappen da es sich bei den Clients um Laptops verschiedener leute handelt die unregelmässig synchronisieren.

Es soll eine Server Client Lösung werden. Wie folgt:
Der Server macht alle X Stunden einen Scan der Ordner auf dem Netzlaufwerk. und schreibt den pfad der Dateien und ein paar zusatzinfos in eine Sql datenbank.

Für jeden benutzer gibt es ein table in der Datenbank mit den Files die er schon auf dem rechner hat. Anhand dieser daten wird verglichen welche neuen daten er noch nicht hat.

Ich benutze ungern die Datenbank und wollte erst alle ergebnisse in ein Textfile schreiben aber wenn es ums vergleichen geht sehe ich ein das eine Datenbank mehr sinn macht … Das thema hatten wir ja erst :stuck_out_tongue:

Aber ich muss nun erstmal versuchen eine Datenbank in VB6 anzulegen.

bis gleich , danke mfg jonny

Hi Joe,

Im Moment versuche ich noch eine Leer Datenbank in VB6 zu
erstellen.

Im Menü findest Du doch einen Editor, mit dem man Datenbanken erstellen kann.
Wenn ich jetzt klicken könnte … :smile:

hier reicht doch eine „Data“ mit dem verweis auf eine leere
Sql Datenbank plus ein Felxgrind damit ich auch was sehe oder
?

Oder. ‚Data‘ ist DAO, SQL geht aber nur mit ADO.

Ich hätte Access7 genomman, dann passt ‚Data‘ und DAO ist leichter zu verwenden als ADO. Ja Alex, ich weiß, ich mag ADO aber immer noch nicht. Für ‚Kleinkram‘ ist DAO einfach besser, einfacher. :smile:

Gruß, Rainer

Oder. ‚Data‘ ist DAO, SQL geht aber nur mit ADO.

Ich hätte Access7 genomman, dann passt ‚Data‘ und DAO ist
leichter zu verwenden als ADO. Ja Alex, ich weiß, ich mag ADO
aber immer noch nicht. Für ‚Kleinkram‘ ist DAO einfach besser,
einfacher. :smile:

Mal eine allgemeine frage kann ich einen bestimmten SQL String auf eine Access DB , Dbase DB und SQL DB anwenden ohne ihn zu verändern ?

mfg joe

Habe noch nen Amd 1200, komplett in Klarlack eingehüllt … Wollte testen wielange dieser in einem Aquarium mit destilierten Wasser durchhält … leider hat dieser seit dem ich ihn ins trockene Aquarium gestellt habe einen wackelkontakt.

P
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Joe,

Mal eine allgemeine Frage kann ich einen bestimmten SQL String
auf eine Access DB , Dbase DB und SQL DB anwenden ohne ihn zu
verändern ?

Wenn die DB das kann, ja.
Nicht alles, was Access kann, kann DBase auch und nicht alles, was SQL-Server kann, kann auch Access. Aber 'SELECT * FROm XXX WHERE a = " & Var1 … geht immer und ja auf jeder DB.

Was Du brauchst, kann Access auf jeden Fall. Was mit Access nicht geht, ist Multiuser-Betrieb, weil man dafür Datensätze sperren muss und das kann Access nicht.

Gruß, Rainer

Was du brauchst ist die Option „Boot on Internet“ kannst deinen ISP ja mal anhauen :stuck_out_tongue:

Hi,
rsync oder robocopy kommen nicht in Frage?

Gruss
Joey

Hallo, ihr beiden,

soweit habe ich das verstanden! Was für ZusatzInfo’s sollen denn noch ausgelesen werden?
Wie kommen denn die Daten vom Clienten zum Server? Der Client muesste diese doch dann stuendlich übertragen? Also kann man sich doch gleich vom Server die Daten liefern lassen, welche Datein er hat schon hat.
Ich persoenlich haette mir eine Klasse geschrieben, wo die Daten abgelegt sind.

Aber nungut, nutzen wir eben eine DB :smile:
Ich muss leider gleich noch ne Runde arbeiten und weiss nicht wie lange das heute gehen wird. Aber wenn ich bis Abends eine Lösung habe, setze ich mich mal hin und tippsle mal was.
Nur bis dato muesste ich wissen, was für Daten Joe alles einliesst.

Soweit sehe ich das richtig.

Die Server Applikation läuft permanent. Alla Stunden X wird auf dem Server nachgeschaut, was für Daten vorhanden sind. Es werden Daten von den Files ermittelt und in eine DB geschrieben. Dann wird aller X Stunden geschaut was für Clienten mit dem Server verbunden sind, genauso wie bei einer Anmeldung. Es wird geschaut ob Daten anders sind und wenn ja dann werden sie automatisch zum Client übertragen? Soweit richtig ?

@ Joe: erstelle mal noich keine Datenbank. Das machen wir dann im Programm :wink:

MfG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Alex,

Der Client
muesste diese doch dann stuendlich übertragen? Also kann man
sich doch gleich vom Server die Daten liefern lassen, welche
Datein er hat schon hat.

wenn ich’s richtig verstanden habe, kann der Client auch ein Notebook sein, das eventuell seit Tagen nicht im Netz war. Wenn es einloggt, soll es alle neuen Daten bekommen und alles was es neu gesammelt hat beim Server abliefern.

Gruß, Rainer

Hi,
rsync oder robocopy kommen nicht in Frage?

Gruss
Joey

Hi Joey.
Also Robocopy geht schonmal nicht. Wie gesagt es sind viele kleine datein ca 80.000. Hier dauert selbst der vergleich ohne kopiervorgang über eine DSl Leitung sehr lange.
Ich habe mir eben die beschreibung von Rsync durchgelesen und auch dort nichts über ein index gefunden. Hier war zwar von einem rsync server die rede doch nichts davon das er sich merkt welcher User, welche Files schon hat ohne einen neuen vergleich zu machen.

Vielen dank mfg jonny

Ja. Moin Alex.
ich schreibe die Antworten in den Text.

Hallo, ihr beiden,

Moin

soweit habe ich das verstanden! Was für ZusatzInfo’s sollen
denn noch ausgelesen werden?

Dateiname, Pfad, grösse, erstellung und änderungsdatum sollte reichen.

Wie kommen denn die Daten vom Clienten zum Server? Der Client
muesste diese doch dann stuendlich übertragen?

Diese Richtung kann erstmal ignoriert werden. Die Daten müssen nur von richtung Netzlaufwerk zum Clienten übertragen werden.

Also kann man sich doch gleich vom Server die Daten
liefern lassen, welche Datein er hat schon hat.
Ich persoenlich haette mir eine Klasse geschrieben, wo die
Daten abgelegt sind.

Der Server soll nur den vergleich übernehmen und die PFadangaben der zu kopierenden Files an den Clienten schicken. Die Netzlaufwerke mit den Daten sind für jeden Clienten zu erreichen.

Aber nungut, nutzen wir eben eine DB :smile:
Ich muss leider gleich noch ne Runde arbeiten und weiss nicht
wie lange das heute gehen wird. Aber wenn ich bis Abends eine
Lösung habe, setze ich mich mal hin und tippsle mal was.
Nur bis dato muesste ich wissen, was für Daten Joe alles
einliesst.

Nun brauche ich etwas platz :stuck_out_tongue:
Also nehmen wir zum anfang mal 3 verschieden TEchniken für jede technik gibt es einen Ordner auf dem Netzlaufwerk und in diesen Ordner werden von Zeit zu ZEit neue Datein geschrieben. Das sind oft XLS oder XML Files kann aber auch alles andere Sein. Wichtig ist das ab dem Hauptordner für die TEchnik alles was darin liegt verglichen wird.
Also kurz:
Ich habe auf dem Laufwerk C: Ordner1, Ordner2, Ordner3 die ich 1:1 mit dem Netzlaufwerk vergleichen möchte.

Soweit sehe ich das richtig.

joa

Die Server Applikation läuft permanent. Alla Stunden X wird
auf dem Server nachgeschaut, was für Daten vorhanden sind. Es
werden Daten von den Files ermittelt und in eine DB
geschrieben.

Bis hier absulute Richtig, nach dem erfassen der Files könnte diese Liste aber gleich mit dem Ist Stand der Clients welcher in einem anderen Table in der Datenbank steht verglichen werden. alles was nun Neu ist sollte entweder in ein text File mit einfachen Pfad angabe kopiert werden oder in eine weiter tabelle. Nun müsste sich der Client nur das txt File ziehen und die PFadangaben Zeile für Zeile abarbeiten.
Nach dem Abarbeiten wäre ein kurzes Feedback richtung Server gut um die Ist Liste des Clienten zu updaten oder evtl nicht kopierte Datein (warum auch immer) beim nächsten mal nochmal zu übertragen.

Dann wird aller X Stunden geschaut was für
Clienten mit dem Server verbunden sind, genauso wie bei einer
Anmeldung. Es wird geschaut ob Daten anders sind und wenn ja
dann werden sie automatisch zum Client übertragen? Soweit
richtig ?

HALT & NEIN, Der Client bekommt euch ein kleines VB6 Tool welches die Anfrage bei bedarf startet. Es kann ja sein das User nur kurz ne Mail verschicken oder was auch immer und die Bandbreite nicht für einen kopiervorgang hergeben wollen.

@ Joe: erstelle mal noich keine Datenbank. Das machen wir dann
im Programm :wink:

OK, im mom schreibe ich meine Rekursive Suche(API) wieder in ein textfile…

Danke, bis später mfg joe

MfG Alex

Hi Joe,

Mal eine allgemeine Frage kann ich einen bestimmten SQL String
auf eine Access DB , Dbase DB und SQL DB anwenden ohne ihn zu
verändern ?

Wenn die DB das kann, ja.
Nicht alles, was Access kann, kann DBase auch und nicht alles,
was SQL-Server kann, kann auch Access. Aber 'SELECT * FROm XXX
WHERE a = " & Var1 … geht immer und ja auf jeder DB.

Was Du brauchst, kann Access auf jeden Fall. Was mit Access
nicht geht, ist Multiuser-Betrieb, weil man dafür Datensätze
sperren muss und das kann Access nicht.

Gruß, Rainer

Moin
Wie auch bei RE^11 geschrieben reicht das ganze einseitig.
Also nur vom Server richtung Client. Um es genauer zu sagen der Client ist zu 100% ein Laptop das eventuell nur einmal im MOnat zu welchem zeitpunkt auch immer die Daten bekommen möchte.

mfg jonny

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]