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 2 von 11     12 34     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
 
#11
  Alt 1. Jun 2005, 11:33
Eigentlich nicht.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

 
Delphi 7 Professional
 
#12
  Alt 1. Jun 2005, 11:46
Hallo, werds mir frühestens heute Abend mal anschauen, aber jetzt schonmal eine Frage:

Synchronisierst du beide Ordner oder hälst du nur den Zielordner auf dem Stand vom Quellordner ( also Backup )?
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

 
Delphi 10.2 Tokyo Starter
 
#13
  Alt 1. Jun 2005, 11:53
Hallo ,
ich hab dein Programm mal runter geladen und getestet. Aber es passiert nichts. Glaub ich.

Ich hab einen Ordner Test mit 2 Unterordnern a und b angelegt und im Quellverzeichnis 2 Dateien eingefügt.

Wenn ich auf Dateiliste klicke sehe ich den Screen1.

Wenn ich auf Abgleichen klicke passiert nichts.

Ist das so gewollt?


MfG
freak
Miniaturansicht angehängter Grafiken
screen1_617.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#14
  Alt 1. Jun 2005, 11:56
Ich halte nur den Zielordner auf dem Stand vom Quellordner (bis jetzt). Ich habe jetzt einen USB Stick, auf dem ich meine Dateien schnell mal zwischen sichere, aber ich sie eigentlich niergens wo anders bearbeite. jetzt hatte ich das Problem, dass ich nicht immer die Ordner auf dem Stick komplett löschen und alles kopieren wollte. Ich habe mir bisher mit einem Batch-Skript geholfen, nur damit lassen sich keine leeren Ordner löschen, deswegen habe ich das Projekt wieder rausgekramt. Aber man könnte es bestimmt so erweitern, dass man auch eine komplette Synchronisation implementiert. Kommt eventuell im nächsten Schritt oder so.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#15
  Alt 1. Jun 2005, 11:57
Zitat von freak4fun:
Wenn ich auf Dateiliste klicke sehe ich den Screen1.
Das ist gut.

Zitat:
Wenn ich auf Abgleichen klicke passiert nichts.
Das ist auch noch gut, wenn es anders wäre, dann hätte heute Nacht jemand an meinem Computer gesessen und da was programmiert.
Bitte aufmerksam lesen: http://www.delphipraxis.net/internal...=375500#375500
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#16
  Alt 1. Jun 2005, 23:58
Sodele. Die erste funktionierende Version ist da. Siehe Anhang im ersten Posting. Deswegen wandert dieser Thread auch nach Freeware. Wenn es weitgehend fertig ist, werde ich wohl OpenSource draus machen.
Michael
  Mit Zitat antworten Zitat
supermuckl

 
FreePascal / Lazarus
 
#17
  Alt 2. Jun 2005, 00:35
wäre ich gestern nich so müde gewesen hätt ich dir noch geholfen.. naja
jedenfalls cool das du es geschafft hast.
ich kann das teil sehr gut gebrauchen

und werde das ganze dann auch noch nach kylix übersetzen und das dann auch hier posten (mit bin)
das dann als commandozeilen prog ohne librarys auskommt
natürlich nur mit deiner erlaubnis.. darf ich?

achja
Zitat:
Aber man könnte es bestimmt so erweitern, dass man auch eine komplette Synchronisation implementiert. Kommt eventuell im nächsten Schritt oder so.
diese komplettsync würde ich jetzt eher nicht gebrauchen wollen weil ich die quelldaten auf alle fälle unberührt haben soll
deshalb wenn, dann abschaltbar oder in extra version bitte
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#18
  Alt 2. Jun 2005, 01:17
Zitat von supermuckl:
wäre ich gestern nich so müde gewesen hätt ich dir noch geholfen.. naja
jedenfalls cool das du es geschafft hast.
ich kann das teil sehr gut gebrauchen
Die beiden entscheidenden Routinen kan nich ja mal hier psoten:
Delphi-Quellcode:
procedure FindFilesToCopy(RootFolder: string; Mask: string = '*.*'; Recurse:
  Boolean = True);
var
  SR: TSearchRec;
  s1, s: string;
begin
  Application.ProcessMessages;
  if bCanceled then Exit;
  // Implementation bis einschließlich Delphi 4
  if RootFolder = 'then
    Exit;
  if AnsiLastChar(RootFolder)^ <> '\then
    RootFolder := RootFolder + '\';

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

  // * * * * *
  // nur bis einschließlich Delphi 4 benötigt
  if Mask = 'then
    Mask := '*.*';
  // * * * * *

  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
            FindFilesToCopy(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 then
      begin
        s1 := copy(RootFolder, length(SourcePath) + 2, length(RootFolder));
        s := BackupPath + '\' + s1 + SR.Name;
        if (MD5_Hash2String(HashForFile(AnsiLowerCase(RootFolder +
          SR.Name))) <>
          MD5_Hash2String(HashForFile(AnsiLowerCase(s)))) or
          (not FileExists(s)) then
        begin
          slFilesToCopy.Add(RootFolder + string(SR.Name));
        end;
      end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
und
Delphi-Quellcode:
procedure FindFilesToDelete(RootFolder: string; Mask: string = '*.*';
  Recurse: Boolean = True);
var
  SR: TSearchRec;
  s: string;
  s1: string;
  s2: string;
  Index: Integer;
begin
  Application.ProcessMessages;
  if bCanceled then Exit;
  // Implementation bis einschließlich Delphi 4
  if RootFolder = 'then
    Exit;
  if AnsiLastChar(RootFolder)^ <> '\then
    RootFolder := RootFolder + '\';

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

  // * * * * *
  // nur bis einschließlich Delphi 4 benötigt
  if Mask = 'then
    Mask := '*.*';
  // * * * * *

  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
            FindFilesToDelete(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 then
      begin
        s1 := copy(RootFolder, length(SourcePath) + 2, length(RootFolder));
        s := BackupPath + '\' + s1 + SR.Name;
        s1 := copy(Sourcepath, 4, length(Sourcepath));
        Index := pos(AnsiLowerCase(s1), AnsiLowerCase(BackupPath));
        s2 := copy(RootFolder, Index, length(RootFolder));
        s := copy(Sourcepath, 0, 3) + s2 + string(SR.Name);
        if not FileExists(s) then
        begin
          slFilesToDelete.Add(RootFolder + SR.Name);
        end;
      end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
Mein Fehler war wohl, dass ich mit dem Dateidatum gearbeitet habe und da etwas schief gegangen ist. Ich gehe jetzt über den Hash.

Zitat:
und werde das ganze dann auch noch nach kylix übersetzen und das dann auch hier posten (mit bin)
das dann als commandozeilen prog ohne librarys auskommt
natürlich nur mit deiner erlaubnis.. darf ich?
Ja klar, kein Problem.

Zitat:
achja
Aber man könnte es bestimmt so erweitern, dass man auch eine komplette Synchronisation implementiert. Kommt eventuell im nächsten Schritt oder so.

diese komplettsync würde ich jetzt eher nicht gebrauchen wollen weil ich die quelldaten auf alle fälle unberührt haben soll
deshalb wenn, dann abschaltbar oder in extra version bitte
Logisch, wenn dann nur optional. Aber ich habe mir das mal durch den Kopf gehen lassen, da müsste man die Suche irgendwie optimieren.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#19
  Alt 2. Jun 2005, 11:03
Version: 0.1.0.2 vom 2006-06-02@12:00
Selber einen Bug gefunden.

Download: Siehe erste Posting.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

 
Delphi 10.2 Tokyo Starter
 
#20
  Alt 2. Jun 2005, 12:01
Hallo ,
Wenn ich Dateien abgleichen drücke, obwoehl keine Dateiem vorhanden sind, bekomme ich eine Fehlermeldung. Kannst du nicht den Button dann einfach wieder aus machen?
Ein automatisches "Dateiliste" drücken nach dem Abgleichen wäre auch nicht schlecht.
Mir ist es passiert, das ich den ZielOrdner = dem QuellOrdner gesetzt hab. Da wäre ein kleiner Hinweis nicht schlecht.
Vielleicht noch eine kleine Zeichenlegende/erklärung dazu.
Was mir noch aufgefallen ist, das Programm blinkt dauernd in der Taskleiste auf.
Wenn man den Quell/Zielordner schon gesetzt hat und den Opendialog öffnet und wieder abbricht ist der alte Pfad wieder weg. Das muss doch nicht sein, oder?
Kannst du dir vielleicht die Ordnerpfade irgendwo merken? Ich bin es langsam leid die immerwieder zu suchen.

Ich finde gut, das es nicht in beide Richtungen funktioniert, weil man dann im Quellverzeichnis ausversehen Daten löschen kann.

Ansonsten ein sehr schönes Programm.

MfG
freak
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 11     12 34     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 13:24 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