Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 18:14

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



2 GROßE Dateien vergleichen

Discussion on 2 GROßE Dateien vergleichen within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
2 GROßE Dateien vergleichen

Hi,

ich brauch hilfe beim vergleichen von großen Dateien. zwischen 10mb und 10GB.

ich benutzt zzt. diese Funktion


jedoch füllt sich durch den .GetBytes(objReader.ReadToEnd) der Speicher und ich bekomme ne Exception. Jemand ne idee? Ich denke das kann man mit nem Buffer lösen?

MfG Ludder231
Ludder231 is offline  
Old 12/01/2016, 11:49   #2
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
So vom Bauchgefühl her würd ich sagen, probiers mal mit MemoryMappedFile , habs mir leider nie wirklich sauber angesehn.
Wäre toll wenn du sagen kannst ob das klappt, hab es nie für so große Sachen used.
Wäre auch intressant wofür genau du es benutzen willst.
dready is offline  
Old 12/01/2016, 11:53   #3
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Quote:
Originally Posted by dready View Post
So vom Bauchgefühl her würd ich sagen, probiers mal mit MemoryMappedFile , habs mir leider nie wirklich sauber angesehn.
Wäre toll wenn du sagen kannst ob das klappt, hab es nie für so große Sachen used.
Wäre auch intressant wofür genau du es benutzen willst.
Kann ich mal testen, danke für den Hinweis. Wir brauchen das um z.b große Outlook.pst zu vergleichen für eine kleine Backup Software.
Ludder231 is offline  
Old 12/01/2016, 12:15   #4
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
Es kommt etwas darauf an wiegroß die Dateien normalerweise sind und was genau du vergleichen willst. Geht es um eine richtige Diff zwischen 2 Datein oder nur darum das sie geändert wurden ?
dready is offline  
Old 12/01/2016, 13:09   #5
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Wenn du nur wissen musst ob die dateien 100% die selben sind dann würde ich mit einem stream die bytes einzeln einlesen und den loop verlassen sobald ein unterschiedliches byte gefunden wurde.

Wenn du weiterhin eine checksumme der dateien vergleichen willst lohnt es sich bei der größe vielleicht auf crc32 zu setzen anstatt einen md5 hash zu berechnen. sollte wenn gut implementiert schneller sein.

Und natürlich nie die komplette datei in den speicher laden. immer nur teile davon
YatoDev is offline  
Thanks
1 User
Old 12/01/2016, 13:13   #6
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
@ jub ans letze hab ich auch gedacht, Geht aber nur wenn keine Bindiff gefordert ist für irgendeine Art von Updating über Patches. Der Gewinn von Crc vs Md5 dürfte fast vernachlässigbar sein weil die HDD praktisch immer der Flaschenhals ist, alternativ wären wohl dafür vorgesehne Algos relativ gut ala Murmur sofern ein Cryptohash nicht notwendig is.(Was Md5 so oder so auch ausm Rennen werfen würde )
dready is offline  
Old 12/01/2016, 13:35   #7
 
Ludder231's Avatar
 
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
Quote:
Originally Posted by YatoDev View Post
Wenn du nur wissen musst ob die dateien 100% die selben sind dann würde ich mit einem stream die bytes einzeln einlesen und den loop verlassen sobald ein unterschiedliches byte gefunden wurde.

Wenn du weiterhin eine checksumme der dateien vergleichen willst lohnt es sich bei der größe vielleicht auf crc32 zu setzen anstatt einen md5 hash zu berechnen. sollte wenn gut implementiert schneller sein.

Und natürlich nie die komplette datei in den speicher laden. immer nur teile davon
Ich möchte nur gucken ob die zu 100% gleich sind. Das mit den teilweisen einlesen hab ich mir schon gedacht, aber ich finde keine guten Beispiele dafür.
Ludder231 is offline  
Old 12/01/2016, 14:07   #8
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
Sieh dir am besten mal die Implentation von ein paar Hash Algos an, praktisch jeder supported Hashing wo man immer und immer wieder Chunks von Daten hinzufügt.

So aus der Hüfte würd ich sagen. Mach ein Stream auf und lad Chunks über ein ByteArray mit Statischer länge, use das Array um die Daten zu hash, reuse es, lade den nächsten Chunk usw.
Vorsicht bei der Chunk Größe die du einliest, die meisten Hashs haben festgesetze Größen die du einhalten musst(bzw ein vielfaches der Größe), da der Algo ansonsten andere Werte produziert als wenn du es auf einmal Hashst.
dready is offline  
Old 12/01/2016, 14:27   #9
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by Ludder231 View Post
Ich möchte nur gucken ob die zu 100% gleich sind. Das mit den teilweisen einlesen hab ich mir schon gedacht, aber ich finde keine guten Beispiele dafür.
Dann mach es exakt so wie ich es beschrieben habe.

2 Datei streams wo du immer eine gleiche anzahl an bytes ausließt und diese miteinander vergleichen.

Und lies nicht immer nur 1 oder 2 bytes aus. du kannst gut mal 1024 bytes jede iteration auslesen.

Die FileStream klasse kann alles was du benötigst.

Du checkst einfach in einem while loop ob das ende des stream erreicht ist oder nicht.

Wenn eine der dateien früher als die andere ans ende kommt dann sind sie unterschiedlich.

sollte die chunks unterschiedlich sein dann verlasse die loops sofort und return false.

Wichtig ist es das der loop nur komplett ausgeführt wird wenn die dateien auch komplett gleich sind.

EDIT: Wenn du die hashes brauchst dann lies beide dateien komplett und öffne einen Md5 stream mit der datei. dürfte die schnellste möglichkeit dafür sein
YatoDev is offline  
Thanks
2 Users
Old 12/23/2016, 11:14   #10
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
Quote:
Originally Posted by YatoDev View Post
Dann mach es exakt so wie ich es beschrieben habe.

2 Datei streams wo du immer eine gleiche anzahl an bytes ausließt und diese miteinander vergleichen.

Und lies nicht immer nur 1 oder 2 bytes aus. du kannst gut mal 1024 bytes jede iteration auslesen.

Die FileStream klasse kann alles was du benötigst.

Du checkst einfach in einem while loop ob das ende des stream erreicht ist oder nicht.

Wenn eine der dateien früher als die andere ans ende kommt dann sind sie unterschiedlich.

sollte die chunks unterschiedlich sein dann verlasse die loops sofort und return false.

Wichtig ist es das der loop nur komplett ausgeführt wird wenn die dateien auch komplett gleich sind.

EDIT: Wenn du die hashes brauchst dann lies beide dateien komplett und öffne einen Md5 stream mit der datei. dürfte die schnellste möglichkeit dafür sein
Wäre es nicht schneller eine SHA Checksumme zu erstellen/lesen und die einfach mit einander vergleichen? Wenn die Summen nicht gleich sein, gibt es Änderungen.
#Saiirex is offline  
Old 12/23/2016, 21:15   #11
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by #Saiirex View Post
Wäre es nicht schneller eine SHA Checksumme zu erstellen/lesen und die einfach mit einander vergleichen? Wenn die Summen nicht gleich sein, gibt es Änderungen.
Weniger code zeilen ja. Aber schneller auf keinen fall.
YatoDev is offline  
Reply


Similar Threads Similar Threads
Suche kleines programm 2 txt dateien vergleichen
12/18/2014 - Coders Trading - 6 Replies
Suche ein kleines programm was 2 Text dateien vergleicht z.b txt 1 1111 2222 333
Desktop Dateien(exen etc) haben sich zu .Ink dateien geändert. Wie änder ich es?
01/31/2014 - Off Topic - 1 Replies
Servus, ich habe mich letztens verklickt und eine Datei bei öffnen mit mit dem falschen Programm geöffnet nun sind manche meiner Dateien zu .ink Dateien geworden. Wie änder ich es ? http://s1.directupload.net/images/140131/kp3xlkhm .png
Große Dateien als *.gif speichern?
08/09/2012 - General Art - 7 Replies
Heyho :) Ich habe folgende frage: Ist es möglich eine große Datei als animiertes gif abzuspeichern? Ich würde nämlich gerne die Navi eines Homepagedesigns animieren. Aber jedesmal, wenn ich versuche zu speichern schmiert Photoshop ab :/ Hier mal ein Screen der grafik, die ich animieren möchte: http://i.epvpimg.com/HvxCc.png
firefox max 250mb große dateien laden
03/25/2012 - Technical Support - 13 Replies
ja wie im titel beschrieben kann ich nur dateien bis ~250mb laden und alles was größer ist bricht bei ~250mb ab. das is recht nervig^^ vielleicht weiß einer ne lösung?



All times are GMT +2. The time now is 18:14.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.