![]() |
Re: Pegasus: Luckies persönliches Synchronisationstool
Hallo Luckie,
ich habe mal die MD5-Unit von Assarbad gegen die von Matthias Fichtner ( ![]() Aber auch mit dieser Unit bleibt dein Programm "hängen". Bei mir besonders bei Word-Dokumenten (*.doc). Also denke ich, hat es mit der Erstellung der MD5-Hashes anscheinend nichts zu tun, das Dein Programm "stehen bleibt". |
Re: Pegasus: Luckies persönliches Synchronisationstool
Duhu Luckie,
hab mir och ma deinen Pegasus angeguckt und irgendwie läuft da was nich so, wie soll bestimmt soll. :shock: Isch kann of die Verzeichnisbuttons rumklicken wie isch will, aber nüschts passiert. :cry: Nagut, also hab'sch ma selber kompiliert, nachgeguckt und siehe da ... CoInitialize(nil) liefet S_FALSE und wenn es dat macht, machst du überhauptnüschts ... nichma 'ne Fehlermeldung hast'e für mich. *eingeschnapptsei* So läuft es ^^
Delphi-Quellcode:
var
CoInit: Boolean; begin Result := false; CoInit := CoInitialize(nil) = S_OK; try ... finally if CoInit then CoUninitialize; end; Hier ma ä leicht verständliches Beispiel:
Delphi-Quellcode:
Man kann nur einmal initialisieren (jedenfalls bei mir > D7 + WinXP SP2).
program Project1;
uses Windows, SysUtils, ActiveX; var CoInit1, CoInit2: Boolean; begin CoInit1 := CoInitialize(nil) = S_OK; try CoInit2 := CoInitialize(nil) = S_OK; try MessageBox(0, PChar('CoInit1=' + BoolToStr(CoInit1, True) + ', CoInit2=' + BoolToStr(CoInit2, True)), '', 0); finally if CoInit2 then CoUninitialize; end; finally if CoInit1 then CoUninitialize; end; end. Und da es über TApplication.Initialize schonmal aufgerufen wurde ...
Delphi-Quellcode:
InitProc zeigt auf InitComObj, wo entweder CoInitializeEx oder CoInitialize ofjerufen wird.
procedure TApplication.Initialize;
begin if InitProc <> nil then TProcedure(InitProc); end; Mann ohh mann, da such man sich dumm und dusslig und dann isses da, wo man hätte als erstes nachsehen können/sollen. :wall:
Code:
//ComObj.pas ... die von D7
initialization ... if not IsLibrary then begin SaveInitProc := InitProc; [color=clRed]InitProc := @InitComObj;[/color] end; Und dat hier... Zitat:
Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
var s: String; begin s := ListView1.Items[Listview1.ItemIndex].Caption; ShellExecute(Handle, 'open', PChar(s), nil, nil, SW_SHOWNORMAL); end; |
Re: Pegasus: Luckies persönliches Synchronisationstool
Werde ich mal einpflegen in meiner Version. Danke für deine Mühe.
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Ach ja, hätt ich beinah vergessen ...
du löschst doch alle leeren Ordner? Na ja, es is zwar nich so schlimm, aber manchma lege ich 'nen Ordner schon an, bevor ich diesen (Tage/Wochen später) mal nutze (befülle). Tja, diese Ordner würden dann ja von dir gelöscht. OK, ich könnte den/die dann zwar irgendwann mal wieder neu anlegen (z.B. erst wenn er wirklich benötigt wird). Eventuell wäre da ein Test ob ein Ordner im Quellverzeichnis vorhanden ist besser, als "nur" nachzusehn ob was in dem Ordner drin ist. |
Re: Pegasus: Luckies persönliches Synchronisationstool
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Zu meiner Schand emuss ich gestehen, dass ich noch nicht dazu gekommen bin etwas an dem Programm zu machen. :oops:
|
Re: Pegasus: Luckies persönliches Synchronisationstool
och, hat ja Zeit ... hab für mich ja auch erstmal nur'n paar Workarounds eingebaut, dammit es ohne Abzustürzen läuft :)
ich war ja mehr üb das VCL von dir überrascht ;) |
Re: Pegasus: Luckies persönliches Synchronisationstool
Moin Luckie ^^
erstmal hab ich ein Problem festgestellt, kann aber einfach nicht sagen woher es kommt o.O und zwar, wenn ich meinen USB-Sick mit einem Verzeichnis auf der Platte synchronisiere, dann läuft erstmal das Erstellen der Dateilist normal ab, auch das Syncronisieren läuft ohne (scheinbar) Probleme durch, nur wenn dich danach nochmal eine Dateiliste erstelle werden plötzlich wieder Unterschiede gefunden, obwohl doch nach dem Syncronisieren keine mehr vorhanden sein sollten. :gruebel: Es gab auch keine Fehlermeldung, daß bestimmte Dateien nicht kopiert werden konnten, oder dergleichen. Auch weiß ich nicht, oder die Dateien beim ersten Durchgang schon in der Dateiliste enthalten waren, oder ob sie schon dort übersehen wurden. Ist bisher auch nur 2-mal aufgefallen und beim ersten Mal war's erst nach dem 3. Durchlauf alles synchron. Beim 2. Mal hatte ich wenigstens mit 'nem eigenem (alten) Programm nochmal verglichen und die Unterschiede waren (nach dem 1. Durchlauf) wirklich noch da. Konnte dieses aber im Debugger bisher noch nicht reproduzieren -.-'' Ach ja: 1 GB USB-Stick im Durchschnit 500-900 MB mit 17.000-18.000 Dateien Dann reagiert dein Programm manchmal nicht mehr ... vorwiegend, wenn man auf Abbrechen geklickt hatte und dann eine Weile was anderes machte (also der Pegasus im Hintergrund lag), danach war dann die ganze Form komplett Weiß und er konnte nur noch über den taskmanager beendet werden. (wobei dieses auch an meinem Windows liegen könnte ... ist ja etwas lediert, wie man an meinem Problemchen mit EM_SETCUEBANNER sieht -.-'' ) Nun noch ein kleiner Tipp bezüglich der Windows-Cache: Du ließt die Dateien ja rückwärts ein, demnach würde ich FILE_FLAG_RANDOM_ACCESS bei CreateFile empfehlen. Und ich weiß ja nicht wieviel du am Pegasus noch ändern willst, aber bei meiner Dateianzahl rechnet der schon echt lange beim Filtern/Anzeigen der Dateiliste (nach dem Suchen/Hashen der Dateien), vorallem wenn sich mal viel verändert hatte. Ich denk mal ein Großteil dieser Zeit (anzeigen / ListBox füllen) könnte man verhindern, indem die Dateiinfos nich noch ein zweites Mal ausgelesen werden würden. (eventuell gleich bei der Dateisuche mit speichern? ... [size=2]GetFileSize und FileAge ruft ja für jede Datei einzeln nochmals FindFirstFile auf ... GetFileSize ruft FileExists, welches nochmals FileAge aufruft, womit dann pro Datei 3-mal FindFirstFile + die paar mal bei der Dateisuche aufgerufen wird ... dauert halt etwas, wenn die WindowsCache sich dann jedesmal nochmals auf dem langsamen USB-Stick vergewissert, daß sie noch aktuell ist[/size]) Zumindest ein FileExists/FileAge/FindFirstFile kann man leicht einsparren :mrgreen;
Code:
////////////////////////////////////////////////////////////////////////////////
// Procedure : GetFileSize // Comment : Returns the filesize function GetFileSize(szFile: PChar): Int64; var fFile : THandle; wfd : TWIN32FINDDATA; begin result := 0; [color=darkred][s]if not FileExists(szFile) then exit;[/s][/color] fFile := FindFirstfile(pchar(szFile), wfd); if fFile = INVALID_HANDLE_VALUE then exit; [color=red]if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then[/color] result := ([color=blue]Int64(wfd.nFileSizeHigh) shl 32[/color]) or wfd.nFileSizeLow; windows.FindClose(fFile); end; |
Re: Pegasus: Luckies persönliches Synchronisationstool
sieht super aus dein programm.
ist es auch netzwerktauglich? |
Re: Pegasus: Luckies persönliches Synchronisationstool
theoretisch ja. (und praktisch vermutlich auch)
Du mußt nur die Ordner so angeben, wenn du es im Explorer machen würdest. Nur in wieweit es bei geschützten Verzeichnissen geht müßte man testen. Es geht halt nahezu alles was ![]() [add2] ![]() [add] PS: der Fehler von nkaaa in #44 is och noch drin ... liegt wohl an der fehlenden Synchronisierung :angel2: |
Re: Pegasus: Luckies persönliches Synchronisationstool
Ich bin in letzter Zeit nicht dazu gekommen etwas daran zu machen. Der Usermanager ist etwas dringender. Aber dafür ist es ja OpenSourcen. ;)
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Wenn man nur wüßte woran es liegt ... das mit dem weißen Fenster tritt z.B. immer nur auf, wenn man es nicht braucht und bisher och nie im Debugger :evil:
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Hallo,
habe es nun aus aktuellem Anlass getestet. Ich kann zwar im Moment noch nichts sagen, denn des wird wahrscheinlich noch eine ganze Weile laufen bei einer 40GB Festplatte zum Synchronisieren. Was aber wünschenswert wäre, wäre eine Art Fortschrittsanzeige, so dass man ungefähr sieht wieviel denn nun noch fehlt. [Nachtrag] Nach ein paar Stunden, werkeln, war das Pegasus dann sang und klanglos verschwunden, so dass ich jetzt keinen Schimmer habe, ob das Synchronisieren geklappt hat oder nicht. Maybe warn die 40GB auch zuviel. War ja ursprünglich für USB Sticks gedacht. [/Nachtrag] |
Re: Pegasus: Luckies persönliches Synchronisationstool
Nein, es werden erst nur die Dateien aufgelistet, die neu, geändert wurden oder in der Quelle nicht mehr vorhanden sind. Erst dann kann man die Synchronisation durchführen. Das sich das Programm beednet hat, ist ein hinweis darauf, dass eine Datei nicht gelsen werden konnte, weil sie eventuell defekt ist.
Eine Fortschritts anzeige w#re zwar möglich, würde aber bedeuten, dass die Synchronisation länger dauert, weil ich erstmal festellen müsste, wie viele Dateien sich denn auf dem Datenträger befinden. Und das war es mir nicht wert. |
Re: Pegasus: Luckies persönliches Synchronisationstool
Also, nichts gegen dein Pegasus, aber ich wollte mal kuz eine alternative aufzeigen ;)
Pegasus war für mich etwas umständlich, weil ich zwei ordner hatte, und immer abwechselnd in einem der beiden gearbeitet habe - nu kann pegasus aber nur einen in einen anderen synchonisieren ... d.h. ich brauchte 2 jobs, einen um geänderte dateien von a nach b zu kopieren, und einen andren, um geänderte dateien von b nach a zu kopieren. :? Ich bin jetzt auf SyncToy ( ![]() Aber sonst sind mit bei Pegasus keine Bugs oder so aufgefallen ;) :thumb: |
Re: Pegasus: Luckies persönliches Synchronisationstool
Pegasus macht genau das, was ich will bzw. brauche. Insofern habe ich keinen Bedarf an einem anderen Programm, was wieder tausend Funktionen mehr hat, die ich nicht brauche. Es ist ja auch aus eigenbedarf entstsnden und ich dachte ich stelle es hie rnurm al rein für diejenigen, die sich das mal angucken wollen.
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Ich weiß nicht wie der aktuelle Stand ist, aber bei mir gehts unter Vista Business gar nicht! Das MainFormular kommt zwar aber ohne Buttons etc und reagiert gar nicht!
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Unter Vista kann ich es leider nicht testen, da ich selbiges nicht habe. Aber komisch ist es schon. Eventuell kannst du es ja mal unter Vista debuggen, der Quellcode ist ja dabei.
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab das auch mal getestet (Vista) und hab genau den selben Fehler bei mir feststellen können! (siehe Screenshot)
Zuerst kommt nen beepton und dann hängt sich das Programm auf... (Aber ohne meldung) Dann hab ich es mal neu compiliert unter Delphi 7 und siehe da, es geht... |
Re: Pegasus: Luckies persönliches Synchronisationstool
Ist ja interessant. Das habe ich noch mit Delphi 6 kompiliert.
|
Re: Pegasus: Luckies persönliches Synchronisationstool
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab' es mal mit D6 und ein wenig Blech neu kompiliert, geht auch. (Vista Business mit eingeschränktem Konto).
Grüße, Messie Edit: nehme alles zurück, nur die GUI-Kompos sind djetzt sichtbar und funktionieren. Unter der Haube rumort es etwas... |
Re: Pegasus: Luckies persönliches Synchronisationstool
Bei mir funzt es unter Vista Busines und Delphi 2007 ohne Probleme.
Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz