Autor Beitrag
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 22.10.03 17:52 
Hallo,
ich suche eine schnelle lösung fürs vergleichen von merhen dateien(über ca 3000 stück).
was wir lösungen haben ich dafür ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Mi 22.10.03 18:00 
Hi!

Z.B TFileStream & CompareMem:


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
function FilesAreEqual(const File1, File2: TFileName): Boolean;
const
  BlockSize = 65536;
var
  fs1, fs2: TFileStream;
  L1, L2: Integer;
  B1, B2: array[1..BlockSize] of Byte;
begin
  Result := False;   
  fs1 := TFileStream.Create(File1, fmOpenRead or fmShareDenyWrite);
  try     
    fs2 := TFileStream.Create(File2, fmOpenRead or fmShareDenyWrite);
    try       
      if fs1.Size = fs2.Size then
      begin
        while fs1.Position < fs1.Size do
        begin
          L1 := fs1.Read(B1[1], BlockSize);
          L2 := fs2.Read(B2[1], BlockSize);
          if L1 <> L2 then
          begin
            Exit;
          end;
          if not CompareMem(@B1[1], @B2[1], L1) then Exit;
        end;
        Result := True;
      end;
    finally
      fs2.Free;
    end;
  finally
    fs1.Free;
  end;
end;
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Mi 22.10.03 18:13 
danke werde ich testen

_________________
MFG
Michael Springwald, "kann kein englisch...."
scrooge
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 200



BeitragVerfasst: Fr 24.10.03 12:08 
Wenns sehr große Dateien sind, würde ich viellleicht TReader verwendedn !
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 24.10.03 13:43 
Hallo,

desweiteren solltest du nur Dateien vergleichen die auch gleich sein können, wen z.B. 2 Dateien eine unterscheidliche Dateigröße haben ist ein weiterer vergleich nicht sinvoll.

Gruß
Klabautermann

PS: Wenn du wirklich jede mit jeder vergleichen musst, dann solltest du nach möglichst vielen Techniken suchen, die dich um den Komplett vergleich umhin bringen.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 24.10.03 14:57 
scrooge hat folgendes geschrieben:
Wenns sehr große Dateien sind, würde ich viellleicht TReader verwendedn !


Das musst du mir erklären? ...TReader ist ein teil des delphi-streaming system, zum lesen von strukturierten formaten!...aber auf die struktur kommt es doch bei einem vergleich garnicht an.

cu,

PS: evtl. kann man es mit hash-codes machen. Von beiden dateien einen Hash erstellen und dann nur den hash vergleichen...oder?

_________________
mfg.
mâximôv
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.10.03 18:11 
Dummerweise sind Hashes nicht eindeutig.
Du könntest zuerst die Dateilänge vergleichen und dann solange suchen bis du (k)einen Unterschied findest.
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 24.10.03 18:25 
gibs nicht noch schnellere möglichkeiten ?
weil wenn ich über ca. 3000 dateien öffnen muss kann es zimlich lange dauern. wenn ich die jetzt für byte für byte auslesen soll.

_________________
MFG
Michael Springwald, "kann kein englisch...."
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.10.03 18:28 
Den Inhalt der Daten kannst du ja schlecht erraten. Also ums öffnen wirst du nicht herum kommen.
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 24.10.03 18:33 
ne darum nicht, aber ich habe davon gehöert, das man irgenwie eine summe bilden köntne oder sowas. oder vileicht hat ja auch jede datei eine eindeutiege nummer dann wäres noch einfacher.

_________________
MFG
Michael Springwald, "kann kein englisch...."
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.10.03 18:40 
Wenn du eine Eindeutige Nummer willst, ist die immer genau so groß wie die Datei, es sei denn du komprimierst sie.

Du kannst einen Hash bilden (Suche in: Delphi-Forum, Delphi-Library MD5), aber die Datei wird trotzdem geöffnet. Ich weiß nicht was schneller ist.


Zuletzt bearbeitet von obbschtkuche am Fr 24.10.03 18:40, insgesamt 1-mal bearbeitet
thebe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Fr 24.10.03 18:40 
Checksummen werden auch durchs Öffnen der Datei generiert. Die kann man der Datei leider nit anner Nasenspitze ablesen..
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 24.10.03 19:43 
auf Checksummen wollte ich raußs wie funktioniert das genau ? was muss ich dabei beachten ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.10.03 19:44 
habe ich zwar oben schon mal geschrieben, aber

Suche in: Delphi-Forum, Delphi-Library MD5

da wirst du auch noch andere Verfahren miterwischen.
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Fr 24.10.03 19:47 
danke werde ich morgen mal anschauen.
jetzt muss ich ins bett :(

_________________
MFG
Michael Springwald, "kann kein englisch...."
scrooge
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 200



BeitragVerfasst: Sa 25.10.03 17:52 
@Maximus: Schon, aber TReader hat auch die Proc FlushBuffer, wie TWriter. Dachte nur, dass es vielleicht einen ähnlichen Performance-Vorteil haben könnte.
mimi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 25.10.03 18:14 
das hat es leider nicht im gegenteiel:
es ist soga langsammer als wenn man TFileStream gleich nutzt.
aber das sollte man nicht merken *G*

_________________
MFG
Michael Springwald, "kann kein englisch...."