Client - Server, Dateivergleich. ANNO bist Du da ?

Moin,
Eigentlich war das Thema/Projekt schon fast vom Tisch aber ich erwische Anno/alex einfach nichtmehr … Mir ging der QuellCode verloren.
Anno bitte meld dich ma.
mfg jonny
Oder ich fange nochmal bei 0 an…

Ich habe vor langer zeit 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. Also Eine Liste mit allen Dateien , Pfad, Größe und Erstellungsdatum. Zusätzlich muss es noch einen Index der ganzen Benutzer geben um änderungen festzustellen

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.

Der Vergleich und der Index sollte am besten mit einer Datenbank realisiert werden.

Besten Dank, mfg Jonny

Dateiliste erstellen

Auf dem Server wird ein kleines Programm alle 3 Stunden
ausgeführt welches ein Index von dem Netzlaufwerk macht. Also
Eine Liste mit allen Dateien , Pfad, Größe und
Erstellungsdatum. Zusätzlich muss es noch einen Index der
ganzen Benutzer geben um änderungen festzustellen

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.

Hi Jonny,

wie schnell ist denn deine rekursive Dateisuche?

Schreibe mal im Texteditor diese Zeilen

echo %time% > h:\zeit.txt
dir c:*.* /s > h:\diralles.txt
echo %time% >> h:\zeit.txt

und benenne sie als .bat, dann starte die batch.

Gruß
Reinhard

Hi Joe,

Oder ich fange nochmal bei 0 an…

nach meinem jetzigen Kenntnisstand würde ich genau das tun. :smile:

Hast Du schon mal einen Blick in VB.NET geworfen?
Da gibt es einen ‚FileSystemWatcher‘. Du gibst dem als Eigenschaft den zu überwachenden pfad und sobald in dem Pfad, einschließlich Unterverzeichnissen, eine Datei geändert, gelöscht oder geschrieben wird, wird ein Ereignis ausgelöst und Du bekommst den Dateinamen mit Pfad.

Kein Timer, kein rekursives durchsuchen … Die ganzen Bremsen, die es in dem Programm gab, sind unnötig. Mit .Net wird Dein Projekt noch 50 Zeilen groß, da ist fast alles schon fertig. :smile:

Gruß Rainer

Hallo Joe!

Wenn du das alles nicht selbst programmieren möchtest, würde ich dir einen Blick auf rsync empfehlen.
Das kann all diese Dinge die du dir wünscht schon. Und bei einer geänderten Datei werden nur die geänderten Teile übertragen. Das sollte für deinen Fall doch genau passen.

mfg
christoph

Moin Rainard,
Ich wusste nicht das es so schnell gehen kann einen komplette FileListe von einem LAufwerk zu erstellen.
Allerdings fehlt mir bei der Batch die möglichkeit etwas auszuwerten.
so wie es aussieht werde ich mir mal den FileSystemWatcher von Rainer anschauen …
mal schauen. Danke dir !
mfg joe

Moin Rainer,
öhm hast du gerade eine empfehlung für VB.NET geschrieben OO. Das ist die erste die ich hier von dir gelesen habe :stuck_out_tongue:

Leider klingt das mit dem FileSystemWatcher zuuuu interessant.
Good bye Freizeit. Naja, erstmal VB.NET suchen & installieren.

Danke, mfg jonny

Hi Joe,

öhm hast du gerade eine empfehlung für VB.NET geschrieben OO.
Das ist die erste die ich hier von dir gelesen habe :stuck_out_tongue:

so weit bin ich da auch. :smile:

Leider klingt das mit dem FileSystemWatcher zuuuu interessant.

Ich dachte auch, daß das für Deinen Zweck sehr interessant ist. Ich werde auch ein paar Programme in der Firma neu schreiben.

Good bye Freizeit. Naja, erstmal VB.NET suchen & installieren.

Suchen?
http://www.microsoft.com/germany/express/download/we…

Gruß Rainer

Moin,
rsync klingt auch sehr gut, also das was ich bis jetzt über Wikipedia finden konnte.
Es scheint Servergesteuert zu sein, genau so wie ich es haben will.
werde es mir bei zeit mal genauer anschauen.

Danke, mfg joe

ui
Das es bei M$ nochmal was umsomst gibt, was ich auch brauchen kann.
Jetzt geht mir das alles aber etwas zu schnell :stuck_out_tongue: Naja, erstmal installieren , evtl finde ich ja ein gescheites Beispiel und kann es mir in einer ruhigen Minute auf der arbeit anschauen.

DANKE!!!

Hallo Joe,

Ich wusste nicht das es so schnell gehen kann einen komplette
FileListe von einem LAufwerk zu erstellen.

ja, Bill gates wußte schon warum er 1500 dollar ausgab um Dos von einem Mitstudenten abzukaufen um damit zu IBM zu gehen und die Mutter aller Verträge abzuschließen.

Allerdings fehlt mir bei der Batch die möglichkeit etwas
auszuwerten.

Täusch dich da ja nicht, man kann sehr wohl nach dem Archiv-Bit filtern, d.h. die Liste besteht nur aus den Dateien die neu oder geändert sind—> Archivbit
Siehe dazu den Anhang.

Und zu filtern, so einfach wie du schreibst

dir c:*.* /s > H:\datei.txt

kannst du auch schreiben

dir c:*.* /s | find .xls > H:\datei.txt

(okay, syntax vielleicht falsch, aber es geht)

dann hast du als Ergebnis in H:\datei.txt alle dateien aufgelistet die im Namen .xls tragen
In der gleichen Zeit wie du sie ja schon erlebt hast.

Bastle das mal in VB nach, alle 300.000 Dateien eines Laufwerkes anschauen ob sie .xls im Namen habe und all diese dateinamen in eine Text-Datei schreiben.
Dann vergleiche die Zeiten dafür, wielange Dos brauchte und dein Code … :smile:

Und grundsätzlich zum rekursiven Aufruf von prozeduren, ist ja chic, aber bei sehr vielen Unterverzeichnissen versagt das, Speicherüberlauf oder so kommt als Meldung.

M.E. ist Dos viel schneller als Vba Vb .Net C c#, naja außer sie bilden das nach :smile:

so wie es aussieht werde ich mir mal den FileSystemWatcher von
Rainer anschauen …

Neumodischer kram, kenne ich nicht, mach ma *gg*

Gruß
Reinhard

Dir
Listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.

DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [/B] [/C] [/D] [/L] [/N]
 [/O[[:]Folge]] [/P] [/Q] [/S] [/T[[:]Zeit]] [/W] [/X] [/4]

 [Laufwerk:][Pfad][Dateiname]
 Bezeichnet Laufwerk, Verzeichnis und/oder Dateien.

 /A Listet Dateien mit angegebenen Attributen auf.
 Attribute D Verzeichnisse R Schreibgesch?tzte Dateien
 H Versteckte Dateien A Zu archivierende Dateien
 S Systemdateien - vorangestellt kehrt die Bedeutung um
 /B Einfaches Format (keine Kopfdaten, keine Zusammenfassung).
 /C Zeigt das Tausendertrennzeichen bei DateigrӇen an (Standard-
 einstellung). Verwenden Sie /-C, um das Tausendertrennzeichen
 nicht anzuzeigen.
 /D Gleich wie Breitformat, jedoch nach Spalten sortiert.
 /L Verwendet Kleinschreibung.
 /N Neues, langes Listenformat (Dateinamen auf der rechten Seite).
 /O Gibt die Liste sortiert aus.
 Folge N Name (alphabetisch) S GrӇe (kleinere zuerst)
 E Erweiterung (alphabetisch) D Datum/Zeit („ltere zuerst)
 G Verzeichnisse zuerst - vorangestellt kehrt die
 Reihenfolge um
 /P Pausiert nach jeder vollen Bildschirmseite.
 /Q Gibt den Besitzer der Datei aus.
 /S Listet Dateien und alle Unterverzeichnisse auf.
 /T Bestimmt welche Zeit verwendet wird (nur f?r NTFS).
 Zeit C Erstellung
 A Letzter Zugriff
 W Letzter Schreibzugriff
 /W Verwendet Breitformat f?r die Auflistung.
 /X Zeigt die Kurznamen f?r Dateien mit Nicht-8Punkt3-Namen an.
 Das Format ist das gleiche wie bei /N, wobei der Kurzname vor
 dem Langnamen eingef?gt wird. Wenn kein Kurzname vorhanden ist,
 werden Leerzeichen angezeigt.
 /4 Zeigt das Jahr vierstellig an.

Optionen k”nnen in der Umgebungsvariablen DIRCMD voreingestellt werden.
"-" vor einer Option setzt die Voreinstellung auáer Kraft, z.B. DIR /-W.

Ich dachte die zeiten von Echo off, If errorlevel, Choice, rem, Goto … sind vorbei…

Hut Ab! ich werde mir das ganzer doch etwas genauer betrachten!!
Danke dir

Ich dachte die zeiten von Echo off, If errorlevel, Choice,
rem, Goto … sind vorbei…

Hut Ab! ich werde mir das ganzer doch etwas genauer
betrachten!!

Hallo Joe,

dann kennst du dich ja aus.

Bei ADO DAO Client_Server undsowas kann ich dir mangels Ahnung nicht helfen.

Aber schnell auf deinem PC bestimmte Dateien in einer Txt-Datei auflisten zulassen, dies dann auch auf deinem laptop, diese dann zu vergleichen, das krieg ich schon hin.
Du mußt nur dafür sorgen daß die die eine Txt-datei auf den anderen Rechner wandert.

Diese beiden dateien dann zu vergleichen und daraufhin bestimmte Dateien rüberzukopieren ist machbar.

Falls du wie ich keine Unterlagen zu Dos haben solltest, gib bei Start—Ausführen ein

cmd /c help >h:\alles.txt

Dann schaue dir mal fc an, mit

cmd /c fc/? >h:\fc.txt

Jetzt kommt mein Problem, das Ergebnis von fc also filecompare kann man filtern und in eine andere Txt-Datei umleiten.
So daß da nur die dateien stehen die neu oder geändert wurden.
Es geht irgendwie mit | und find, aber wie genau habe ich vergessen :frowning:

Bei Interesse kram ich mal im Hirn :smile:

Gruß
Reinhard