AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Filedup 1.0.7.0 - Identische Dateien finden
Thema durchsuchen
Ansicht
Themen-Optionen

Filedup 1.0.7.0 - Identische Dateien finden

Ein Thema von bigg · begonnen am 21. Jul 2005 · letzter Beitrag vom 16. Jun 2007
Antwort Antwort
Seite 4 von 12   « Erste     234 56     Letzte »    
bigg
Kann gelöscht werden.
 
Benutzerbild von negaH
negaH
 
#31
  Alt 3. Aug 2005, 13:09
Mein Vorschlag sollte dir eigentlich nur bewusst machen das ein "Stückchenhafter" Vergleich zweier Dateien in deinem Szenario nur überflüssige Rechenleistung kosten wird.

Die Methodik von D.J.Bernstein lohnt sich nur wenn bei jedem größer werdenden Vergleich die Komplexität eben nicht linear proportional ansteigt, sondern zb. expotentiell oder qudratisch, oder man mehrere Berechnungen über viele Daten in parallel durchführen kann. Beides trifft aber auf dein Problem nicht zu, und ergo ist es am besten beim binären Vergleich der Dateien die Dateien bis zum Ende hin in einem Rutsch zu vergleichen.


Du machst es doch nun so:

1.) vergleiche Dateigrößen, wenn ungleich Exit
2.) vergleiche beide Hash Prüfsummen, wenn ungleich Exit
3.) vergleiche die ersten 2048 Bytes, wenn ungleich Exit
4.) vergleiche die restlichen X Bytes bis zum Ende der Datei

Schritt 3.) ist absolut überflüssig und macht nur Sinn wenn entweder

a) zwischen Schritt 3.) und 4.) noch andere Dateien in parallel verglichen werden
b) die Komplexität des Vergleichsalgorithmus nicht linear proportional mit jedem zu vergleichenden Byte steigen würde. Sprich zb. bei jedem Byte verdoppelt sich die Laufzeit des Vergleichsalgos., die Komplexität würde also quadratisch mit jedem zu vergleichenden Byte ansteigen.

Gruß Hagen
  Mit Zitat antworten Zitat
bigg
 
#32
  Alt 3. Aug 2005, 14:09
moin hagen,

Zitat:
Mein Vorschlag sollte dir eigentlich nur bewusst machen das ein "Stückchenhafter" Vergleich zweier Dateien in deinem Szenario nur überflüssige Rechenleistung kosten wird.
Was könnte daran Rechenleistung kosten?

Zitat:
3.) vergleiche die ersten 2048 Bytes, wenn ungleich Exit
Exit muss man in allen Punkten gestrichen werden,
da alle Anweisungen in jedem Fall ausgeführt werden.

Zitat:
ergo ist es am besten beim binären Vergleich der Dateien die Dateien bis zum Ende hin in einem Rutsch zu vergleichen.
Ja, aber in welchen Fällen sind Dateien wirklich nahezu identisch?
Alle Dateien komplett zu berechnen, würde in vielen Fällen einfach zuviel Zeit kosten.

Optimal ist es noch nicht, aber doch schnell genung, um sich sich mal eben einen Überblick zu verschaffen, welche Dateien eventuell gleich sind. (Das ich bei kleineren Dateien doppelt rechne, weis ich)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH
 
#33
  Alt 3. Aug 2005, 15:25
Zitat:
Was könnte daran Rechenleistung kosten?
Nochmal. Ich gehe davon aus das Step 3.) und 4.) separate Funktionen sind. Beide Funktionen müssen also die Dateien öffnen, Daten einlesen, diese vergleichen und Dateien wieder schließen.

Falls nun Step 4.) immer ausgeführt wird wenn Step 3.) sagt das die ersten 2048 Bytes gleich sind dann würde man also 1 mal zuviel Dateien öffen, Daten einlesen, Daten vergleichen und Dateien wieder schließen. Denn exakt diese ersten 2048 Bytes würden auch beim Step 4.) sowieso eingelesen und verglichen.

Es würde also ausreichen Step 3.) zu eliminieren und gleich im Step 4.) Bufferweise mit 2048 Bytes Größe die Dateien zu vergleichen. Sollte beim ersten 2048 Bytes Buffer keine Übereinstimmung existieren so würde auch Step 4.) die identische Laufzeit zu Step 3.) haben. Sollte aber diese 2048 Bytes gleich sein so würde man mit Step 3.) zusammen also die Dateien doppelt Öffnen, vergleichen,und Schließen.

Die Gesamtperformance mit dem Step 3.) ist also schlechter als ohne diesen und real an zusätzlicher Information bringen tut er nichts da Step 4.) diesen eh funktionell ersetzen wird.

Wie oben angesprochen gibt es nur Ausnahme-Gründe warum man Step 3.) tatsächlich durchführen sollte. Entweder der Bytevergleich der Dateien ist von der Komplexität nicht linear, was aber nicht der Fall hier ist. Oder aber zwischen dem Step 3.) und 4.) gibt es noch andere Schritte, wie zb. eine Progressbar die in Multithreaded Vergleichen eine Anzeige der möglicherweise gleichen Dateien updaten möchte, also quasi Parallele Abarbeitung der Dateivergleiche. Abver auch das machst du nicht, ergo: Step 3.) bringt rein garnichts ausser das er Zeit kostet.

Gruß Hagen
  Mit Zitat antworten Zitat
bigg
 
#34
  Alt 3. Aug 2005, 16:16
moin hagen,

exakt, Punkt 3 würde in diesem Fall nichts bringen, wenn man Punkt 4.
dahin gehend optimiert, so wie du es angesprochen hast. Im schlechtesten
Fall würden die Funktionen einmal zuviel aufgerufen, so wie sie momentan vorliegen.


Nun müsste sich nur noch jemand bereit erklären, das ganze umzusetzen,
huhu dizzy wo bist du?
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

 
Lazarus
 
#35
  Alt 30. Aug 2005, 14:40
schönes Programm, aber ich hätte es gerne rekursiv
  Mit Zitat antworten Zitat
bigg
 
#36
  Alt 4. Jun 2006, 23:07
Zitat von yankee:
schönes Programm, aber ich hätte es gerne rekursiv
Ich habe es jetzt "halbwegs" brauchbar rekursiv umgesetzt. Würd mich freuen, wenn du mal drüber scannst.
btw: Der Scannvorgang kann auch noch nicht abgebrochen werden. Programm mit Source im ersten Beitrag...
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

 
Lazarus
 
#37
  Alt 5. Jun 2006, 07:10
cool...
Noch ein paar Vorschlaege:
1. Ini statt Registry. zumindets ich kann das nicht haben, wenn jedes Programm da Werte in die Registry schreibt. Die wird schliesslich die ganze Zeit im Speicher gehalten. Wo kommen wir da denn hin, wenn das jedes Programm macht...?
Also ich habe mal eben ungetestet deine Speicher und Ladefunktionen auf ini umgeschreiben:
Delphi-Quellcode:
uses IniFiles;

procedure TMainForm.SaveSettings;
var ini: TIniFile;
    WsState: Integer;
begin
  ini :=TIniFile.Create(ExtractFilePath(Application.ExeName)+'conf.ini');
  try
      WsState := GetWindowState;
      if WsState = 1 then Self.WindowState := wsNormal;
      ini.WriteInteger('windowpos','Width', Self.Width);
      ini.WriteInteger('windowpos','Height', Self.Height);
      ini.WriteInteger('windowpos','Left', Self.Left);
      ini.WriteInteger('windowpos','Top', Self.Top);
      ini.WriteInteger('windowpos','State', WsState);
  end;
  finally
      ini.Free;
  end;
end;

procedure TMainForm.LoadSettings;
var ini: TIniFile;
    WsState: Integer;
begin
  ini :=TIniFile.Create(ExtractFilePath(Application.ExeName)+'conf.ini');
  try
      Self.Width :=ini.ReadInteger('windowpos','Width', Self.Width);
      Self.Height :=ini.ReadInteger('windowpos','Height', Self.Height);
      Self.Left :=ini.ReadInteger('windowpos','Left', Self.Left);
      Self.Left :=ini.ReadInteger('windowpos','Top', Self.Top);
      SetWindowState(ini.ReadInteger('windowpos','State', GetWindowState()));
  end;
  finally
      ini.Free;
  end;
end;
2. Dann vielleicht noch eine automatische Loeschfunktion fuer die doppelten Dateien.
Mir faellt es ein bisschen schwer deinen qt zu editieren, da ich diese ganzen Designpakte oder was das ist nicht habe...
Was fuer den Anfang schon gut ist, waere, wenn man in deiner Tabelle eine Datei einfach markieren kann und dann auf der Tastatur Entfernen druecken kann um die ausgewaehlte Datei von der HDD zu schmeißen. Automatisch loeschen waere aber besser...

3. Eine Legende fuer die Farben. Ein kleines Fenster im Hilfemenue oder so reicht ja...

Das mal so fuer "jetzt schnell" *gg*
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#38
  Alt 7. Jun 2006, 11:30
Win98 SE:
Die Oberfläche sieht sch*** aus (die Memüleiste)

und funktionieren tut das Programm och nicht, obwohl es fest beheupte es würde es.

Es meint es würde arbeiten.
Zitat:
• Suche Dateien...
• Gefundene Dateien: 0
• Fertig!
Dafür braucht es knapp 10 Sekunden und dabei greift es nachweislich nicht auf den Datenträger zu.

- ein USB-Stick (das Lämpchen blinkt nicht)
- USB 1.1 und über 60 MB ... das dauert niemals nur 10 Sekunden
- es sind mit Sicherheit Dateien doppelt
- und keine Fehlermeldung, oder so
Angehängte Grafiken
Dateityp: bmp unbenannt_738.bmp (240,1 KB, 45x aufgerufen)
  Mit Zitat antworten Zitat
bigg
 
#39
  Alt 7. Jun 2006, 12:53
Hi himitsu,

was funktioniert nicht?
Die Dateisuche auf einem USB-Stick unter Windows 98 Second Edition?
Ich habe die First Edition, da könnte ich heut mal nen bissl frickeln.

Ich habe auch einen USB-Stick mit der Version 1.1, meiner blinkt allerdings, wenn er an ist.
Könnte es vielleicht sein, das der Stick gar kein Strom bekommen hat, du aber den Wechseldatenträger im Dialog ausgewählt hast, bevor er aus ging/ getrennt wurde? Wenn dem so ist, wäre es doch kein Fehler, oder?
Dann müßte ich allerdings überprüfen, ob das Laufwerk verfügbar ist und gegebenfalls eine Fehlermeldung implementieren.

Nicht, das du mich veräppeln willst.

PS: Die Win9x Reihe habe ich noch nicht getestet, leglich Windows 2000 mit SP4 sowie Windows XP mit SP2.
Und zum Menü kann ich nur sagen, ja das kommt davon wenn man noch selbst Hand anlegt und selbst frickelt, aber ich kümmere mich darum.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#40
  Alt 7. Jun 2006, 13:05
Ich hab ja Zugriff auf den Stick und die LED ist auch an (außerdem ist FileDup da mit drauf, also wird er wohl auch an sein )

Ich klick halt auf Datei > Durchsuchen..., dann geh das Statusfenster auf und er sucht (angeblich), aber nichts passiert wirklich.

(hab hier kein Delphi drauf, sonst hätte ich schonmal versucht zu debuggen ._.)

Nochmal zum Menü ... wie wäre es, wenn du bei den "wenigen" Einträgen keine Untermenüs erstellst?
also nur "Durchsuchen", "Beenden" und "Version", dann bräuchte man ein paar Klicks weniger ^^
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 12   « Erste     234 56     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 21:51 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