| Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Mi 22.10.03 18:00
Hi!
Z.B TFileStream & CompareMem:
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 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 22.10.03 18:13
danke werde ich testen
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
scrooge
      
Beiträge: 200
|
Verfasst: Fr 24.10.03 12:08
Wenns sehr große Dateien sind, würde ich viellleicht TReader verwendedn !
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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
|
Verfasst: 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 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
|
Verfasst: Fr 24.10.03 18:28
Den Inhalt der Daten kannst du ja schlecht erraten. Also ums öffnen wirst du nicht herum kommen.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
|
Verfasst: 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.
Zuletzt bearbeitet von obbschtkuche am Fr 24.10.03 18:40, insgesamt 1-mal bearbeitet
|
|
thebe
      
Beiträge: 128
WinXP Home
D6 Enterprise
|
Verfasst: 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 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
|
Verfasst: Fr 24.10.03 19:44
habe ich zwar oben schon mal geschrieben, aber
MD5
da wirst du auch noch andere Verfahren miterwischen.
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 24.10.03 19:47
danke werde ich morgen mal anschauen.
jetzt muss ich ins bett 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
scrooge
      
Beiträge: 200
|
Verfasst: 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 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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...."
|
|