Entwickler-Ecke
Dateizugriff - Schnelle lösung fürs vergleichn von dateien gesucht
mimi - Mi 22.10.03 17:52
Titel: Schnelle lösung fürs vergleichn von dateien gesucht
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 ?
toms - Mi 22.10.03 18:00
Hi!
Z.B TFileStream & CompareMem:
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 - Mi 22.10.03 18:13
danke werde ich testen
scrooge - Fr 24.10.03 12:08
Wenns sehr große Dateien sind, würde ich viellleicht TReader verwendedn !
Klabautermann - 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 - 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?
Anonymous - 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 - 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.
Anonymous - Fr 24.10.03 18:28
Den Inhalt der Daten kannst du ja schlecht erraten. Also ums öffnen wirst du nicht herum kommen.
mimi - 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.
Anonymous - 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 (
MD5), aber die Datei wird trotzdem geöffnet. Ich weiß nicht was schneller ist.
thebe - 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 - Fr 24.10.03 19:43
auf Checksummen wollte ich raußs wie funktioniert das genau ? was muss ich dabei beachten ?
Anonymous - Fr 24.10.03 19:44
habe ich zwar oben schon mal geschrieben, aber
MD5
da wirst du auch noch andere Verfahren miterwischen.
mimi - Fr 24.10.03 19:47
danke werde ich morgen mal anschauen.
jetzt muss ich ins bett :(
scrooge - 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 - 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*
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!