AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Pegasus: Luckies persönliches Synchronisationstool
Thema durchsuchen
Ansicht
Themen-Optionen

Pegasus: Luckies persönliches Synchronisationstool

Ein Thema von Luckie · begonnen am 28. Feb 2005 · letzter Beitrag vom 8. Jan 2009
Antwort Antwort
Seite 3 von 11     123 45     Letzte »    
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
Und zwar geht es darum, wenn man ein transportables Speichermedium benutzt, möchte man das eventuell mit einem Verzeichnis auf der Festplatte synchronisieren. Jetzt könnte man es sich einfach machen und einfach das entsprechende Verzeichnis auf dem USB Stick löschen und das von der Festplatte auf den USB Stick kopieren. Nun ist das natürlcih nicht sehr elegant und für den USB Stick nicht sehr schön, da solche Speichermedien nur begrenzt beschrieben werden können. Lese- und Schreibzugriffe sollten also auf ein Mindestmaß reduziert werden.

Hier kommt mein Programm ins Spiel, das mag es zwar schon geben, aber was soll's. Mein Programm stellt jetzt also zwei Dateilisten zusammen. Die erste Liste beinhaltet die Dateien, die kopiert werden müssen, weil sie im Zielverzeichnis nicht existieren oder weil sie geändert wurden. Und eine Dateiliste mit zu löschenden Dateien, die im Quellverzeichnis nicht mehr existieren. Ergebnis soll sein, dass die Verzeichnisse auf der Festplatte und auf dem USB Stick später identisch sind.

Das Programm befindet sich im Anhang. Bedinung und Ergebnis sollten selbst erklärend sein. "d:\Dokumente" ist bei mir zum Beispiel das Verzeichnis in dem ich arbeite und "I:\eigene Dateien\2005-01-27\Dokumente" wäre mein Backupverzeichnis mit dem ich es synchronisieren will. Am Ende sollen dann beide Ordner "Dokumente" identisch sein.

Version: 0.1.0.1 vom 2005-06-02@0:50
Erste funktionstüchtige Version. Bitte mal testen, ob irgendwelche schwerwiegenden Macken auftreten.

Version: 0.1.0.2 vom 2005-06-02@12:00
Selber einen Bug gefunden.

Version: 1.0.0.1 vom 2005-06-04@00:58
Langsam wird es brauchbar.
Neues Feature: Jobs. Man kann jetzt Abgleiche von Verzeichnissen abspeichern, so das sman nicht immer die passendne Ordner manuell auswählen muss.

Version: 1.2.0.0 vom 2005-06-11@15:10
Multithreading implementiert
TPegasus-Klasse mit Events ausgestattet
Anzeigen der aktuellen Dateinamen in der Statuszeile

Version: 1.3.0.0 vom 2005-06-13@13:16
Nur geänderte Dateien haben jetzt ein orangenes/braunes ( ) Plus

Version: 1.5.0.0 vom 2006-06-24
Skiplist implementiert. Gibt es in der Ini-Datei eine Sektion "SkipList", werden die Ordner und Unterordner in dieser Sektion beim Abgleich ignoriert:
Code:
[Skiplist]
0=D:\Homepage\luckie-online\forum
Jetzt auch mit Sourcecode im Archiv.
Miniaturansicht angehängter Grafiken
pegasus_570.png  
Angehängte Dateien
Dateityp: zip pegasus_117.zip (291,2 KB, 390x aufgerufen)
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#21
  Alt 2. Jun 2005, 12:14
Danke für das feedback. *unter den schreibtisch kriecht, um sein Pflege kaninchen Gipsy zu knuddeln*
Michael
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

 
Delphi 7 Professional
 
#22
  Alt 2. Jun 2005, 13:45
Hi,

ich finde das Programm grundsätzlich von der Idee her sehr nützlich, werde es aber aus Zeitmangel erst nachher testen, gleich mit einem "Ernstfall", nämlich geänderten Quelltext vom Laptop auf meinen PC übertragen. Mir ist im Screenshot aufgefallen, dass es anscheinend keine Möglichkeit gibt, sich die Unterschiede in den geänderten Dateien anzeigen zu lassen. Das fände ich noch eine super Funktion

cu
  Mit Zitat antworten Zitat
Seven

 
Delphi 5 Enterprise
 
#23
  Alt 3. Jun 2005, 09:53
lässt sich die Geschwindigkeit noch optimieren? *duck*
In einem Ordner mir 2000 Dateien ist das Prg ganz schön beschäftigt. ca. 60 Sek

*offtopic an*Zur Zeit benutze ich rsync welches im Cygwin mit dabei ist. Dieses Prg läuft wesentlich schneller. Lässt sich aber halt nur aus der Konsole starten. Was aber nicht schlimm ist. Eine Batch-Datei erstelllen und fertig.*offtopic aus*
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#24
  Alt 3. Jun 2005, 14:24
Hi,

Deine beiden Datei-Such Prozeduren sind verbesserungswürdig.
Als erstes müsstest Du die Delphi-Version spezifischen Hinweise beachten und ggf. Code, der nur für Delphi 4 und niedriger vorgesehen ist, entfernen.

Auch ähnlich sich die beiden Prozeduren, sodass man sie auf folgende Weise zusammenfassen könnte.

Du gestaltet ein Event, z.B.
Delphi-Quellcode:
type
  TOnFindFile = procedure(const FileName: string) of object;
Deine Suchprozedur änderst Du zu so einer:
Delphi-Quellcode:
procedure FindFiles(RootFolder: string; OnFindFile: TOnFileFind; Mask: string = '*.*'; Recurse:
  Boolean = True);
var
  SR: TSearchRec;
  s1, s: string;
begin
  Application.ProcessMessages;
  if bCanceled then Exit;
  if RootFolder = 'then
    Exit;

  // Implementation ab Delphi 5
  RootFolder := IncludeTrailingPathDelimiter(RootFolder);

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory = faDirectory then
            // --> ein Verzeichnis wurde gefunden
            // der Verzeichnisname steht in SR.Name
            // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
            // RootFolder + SR.Name
          if (SR.Name <> '.') and (SR.Name <> '..') then
            FindFiles(RootFolder + SR.Name, Mask, Recurse);
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
  try
    repeat
      if (SR.Attr and faDirectory <> faDirectory) and (Assigned(OnFileFind)) then
          OnFileFind(RootFolder + SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
Und in die beiden OnFileFind Events, die Du implementieren musst, schreibst Du einfach den Code rein, den Du bisher seperat in den beiden Prozeduren verteilt hattest. Ggf. musst Du noch die Paramterliste ergänzen, falls Du im Event noch andere / weitere Informationen brauchst.

Ich hoffe, dass ich Dir damit einen kleinen Ansatzpunkt zur Verbesserung geben konnte

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#25
  Alt 3. Jun 2005, 14:45
Das ändert nichts an der Tatsache, dass ich so wohl das Source Verzeichnis durchsuchen muss, als auch das Backup Verzeichnis oder habe ich da jetzt einen Denkfehler?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#26
  Alt 3. Jun 2005, 14:55
Zitat von Luckie:
Das ändert nichts an der Tatsache, dass ich so wohl das Source Verzeichnis durchsuchen muss, als auch das Backup Verzeichnis oder habe ich da jetzt einen Denkfehler?
Du musst natürlich beide Ordner durchsuchen, brauchst aber den Großteil des Codes nicht doppelt zu schreiben, sondern nur den relevanten Teil.

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#27
  Alt 3. Jun 2005, 14:56
OK, das wär eine Optimierumng des Codes. Bringt aber nichts an Performance.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

 
Delphi 7 Professional
 
#28
  Alt 3. Jun 2005, 17:43
Hi,

wie versprochen hab ich nun das Programm getestet, als Quelle diente eine Netzwerkfreigabe und als Ziel mein lokaler Ordner. Das funktionierte soweit problemlos. Wie von anderen schon erwähnt braucht das Programm aber recht lange bei großen Ordnern. Vielleicht könnte man vor dem eigentlichen Vergleichen eine Prüfsumme wie CRC32 erstellen, da muss nicht so viel von der Datei gelesen werden AFAIR, das spart Bandbreite (beim Netzwerkvergleichen)/bringt Performance. Wenn du an der Idee gefallen findest, kann ich dir gerne den nötigen Code zum CRC32-berechnen zukommen lassen.

Kritik:
- Das Programm "flasht" in der Taskleiste, auch wenn es im Vordergrund ist (also das aktive Fenster). Sollte so ja nicht sein, denke ich?

Vorschläge:
- Wenn sich Dateien ändern würde ich ein anderes Icon nutzen, als das grüne Plus, was ja auch für komplett neue Dateien verwendet wird.
- Dateien vom Vergleichen ausschließen wäre nett (z.B. *.dcu )
- Automatisch abgleichen und mehrere Ordner zum abgleichen angeben, alternativ halt Parametersupport und 'ne Batch-Datei, ist aber nicht so schön.

Kommt noch eine Hilfedatei zu dem Programm?

cu
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#29
  Alt 3. Jun 2005, 17:50
Zitat von sECuRE:
Hi,

wie versprochen hab ich nun das Programm getestet, als Quelle diente eine Netzwerkfreigabe und als Ziel mein lokaler Ordner. Das funktionierte soweit problemlos. Wie von anderen schon erwähnt braucht das Programm aber recht lange bei großen Ordnern. Vielleicht könnte man vor dem eigentlichen Vergleichen eine Prüfsumme wie CRC32 erstellen, da muss nicht so viel von der Datei gelesen werden AFAIR, das spart Bandbreite (beim Netzwerkvergleichen)/bringt Performance. Wenn du an der Idee gefallen findest, kann ich dir gerne den nötigen Code zum CRC32-berechnen zukommen lassen.
Ich biolde Hashes über die Dateien um die geänderten zu ermitteln. dabei benutze ich einen optimierten MD5 Hash von Assarbad.

Zitat:
Kritik:
- Das Programm "flasht" in der Taskleiste, auch wenn es im Vordergrund ist (also das aktive Fenster). Sollte so ja nicht sein, denke ich?
Doch soll so sein. das tut es, wenn es mit der Dateiliste oder mit dem Abgleichen fertig ist. Wenn ich es benutze, dann arbeite ich meist in einem anderem fenster weiter und würde dann auch keine Messagebox-Benachrichtigung von dem Programm bemerken. das war der Hintergedanke dabei.

Zitat:
Vorschläge:
- Wenn sich Dateien ändern würde ich ein anderes Icon nutzen, als das grüne Plus, was ja auch für komplett neue Dateien verwendet wird.
Vorschlag?
Zitat:
- Dateien vom Vergleichen ausschließen wäre nett (z.B. *.dcu )
... und eventuell ganze Ordner oder so. Hab eich auch schon drangedacht, war aber bisher zu faul mir über eine möglioche Lösung Gedanken zu machen.
Zitat:
- Automatisch abgleichen und mehrere Ordner zum abgleichen angeben, alternativ halt Parametersupport und 'ne Batch-Datei, ist aber nicht so schön.
Ich wollte "Jobs" unterstützen: Man speichert einmal Quelle und Ziel unter einem Job-Namen ab und dieser Job kann dann wieder geladen werden oder so.
Zitat:
Kommt noch eine Hilfedatei zu dem Programm?
Langsam, wir sind erst beim Testen, ob alle Dateien korrekt erkannt werden.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

 
Delphi 7 Professional
 
#30
  Alt 3. Jun 2005, 18:42
Hi,

nunja, das Flashen sollte aber nur dann eintreten, wenn das Programm nicht im vordergrund ist. Also if (not Application.Active) then . Die Sache mit den Jobs hört sich gut an. Der Vorschlag war, ein anderes Icon zu benutzen um den Unterschied zu kennzeichnen. War das unklar formuliert? Finde es eigentlich verständlich .

cu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 11     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz