AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Eindeutiger Vergleich für große Dateien gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

Eindeutiger Vergleich für große Dateien gesucht

Ein Thema von dahead · begonnen am 2. Aug 2005 · letzter Beitrag vom 10. Mai 2014
Antwort Antwort
Seite 4 von 12   « Erste     234 56     Letzte »    
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#31

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 00:44
ups. fehler.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#32

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 00:48
Moin,

ich führe noch vor dem vollständigen Scan einen schnellen Scan durch.
Dabei lese ich die ersten 2 KB ein und bilde wiederum eine Prüfsumme, kommt es zu doppelten Summen überrpüfe ich die gesamte Datei.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#33

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 00:56
hallo,

ja, das ist klar. allerdings prüfst du doch die komplette datei, indem du von der kompletten datei eine checksumme erstellst. aber wie hier in diesem thread ja festgestellt wurde, ist das nicht 100%ig eindeutig.

oder ist es schon zu spät für mich?
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#34

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 00:59
moin,

auch der komplette Scan stellt nicht sicher, das die Dateien identisch sind.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#35

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 01:00
ja, genau das meine ich doch.

also prüfst du in deinem programm nicht byte per byte, oder?
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#36

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 01:02
Byte für Byte md5, eine andere Methode habe ich noch nicht eingebaut,
bin noch am optimieren.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#37

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 01:05
ok, dann habe ich es verstanden. mich hätte nur die geschwindigkeit bei einer byte-per-byte analyse gewundert. bei mir rotieren da die festplatten köpfe, und bei deinem programm war er in einem bruchteil der zeit damit fertig.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#38

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 01:08
Sind denn die Ergebnisse identisch oder gab es dabei abweichungen?
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#39

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 01:12
du meinst bei meinen tests nehme ich an?

naja, kann ich so nicht sagen, da ich nur diese eine datei kopiert und wieder eingefügt habe (ich habe leider nicht sonderlich viele dateien größer 1 gb auf meinem rechner liegen). der test ist also nicht aussagekräftig. ich wollte halt für den fall der fälle (kollision) doch einen byte-per-byte vergleich einbauen.

der startet (ähnlich wie bei dir) erst, wenn dateigröße und md5 hash gleich sind.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#40

Re: Eindeutiger Vergleich für große Dateien gesucht

  Alt 3. Aug 2005, 01:25
@dahead:

Zitat:
byte pro byte vergleich der kompletten filestreams
Du benutzt noch Filestreams ?
Suche mal nach "Memmory Mapped Files" und benutze diese neuere Technik des OS.
FileStreams sind schön und gut haben aber den Nachteil das sie auf eienr "älteren" Schnittstelle zum Datenträger basieren. Ich habe mit MMF's die ich readonly und in partitionen erzeuge bessere Performance erzielt.


Delphi-Quellcode:
type
  TMMF = class(TCustomMemoryStream) // readonly Memory Mapped File
  private
    FHandle: THandle;
    FMapping: THandle;
  public
    constructor Create(const FileName: String);
    destructor Destroy; override;
    function Write(const Buffer; Count: Longint): Longint; override;
  end;

constructor TMMF.Create(const FileName: String);
var
  P: Pointer;
  S: Integer;
begin
  FHandle := FileOpen(FileName, fmOpenRead or fmShareDenyWrite);
  if FHandle > 0 then
  begin
    S := GetFileSize(FHandle, nil);
    if S > 0 then
    begin
      FMapping := CreateFileMapping(FHandle, nil, PAGE_READONLY, 0, 0, nil);
      if FMapping <> 0 then
      begin
        P := MapViewOfFile(FMapping, FILE_MAP_READ, 0, 0, 0);
        if P <> nil then inherited SetPointer(P, S);
      end;
    end;
  end;
  inherited Create;
end;

destructor TMMF.Destroy;
begin
  if Memory <> nil then UnmapViewOfFile(Memory);
  if FMapping <> 0 then CloseHandle(FMapping);
  if FHandle <> 0 then CloseHandle(FHandle);
  inherited Destroy;
end;

function TMMF.Write(const Buffer; Count: Longint): Longint;
begin
  Result := 0; // we should raise a exception here, but useloss
end;
die obige quick&dirty Klasse kann als Ersatz für deinen Filestream dienen. Da sie von TCustomMemoryStream abgeleitet wurde kannst du über .Memory und .Size direkt per CompareMem() zwei Dateien vergleichen oder eben eine Hashfunktion drüberrutschen lassen.
Wie gesagt sie ist aber Quick&Dirty und man müsste noch einige Kleinigkeiten verbessern. Für deine ersten Versuche zum Vergleich der Performance zu TFileStream dürfte es aber reichen.

Gruß Hagen
  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 19:37 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