Προς το περιεχόμενο

Έλεγχος αν τα περιεχομενα δυο αρχειων ειναι ιδια


geo1st487

Προτεινόμενες αναρτήσεις

Δημοσ.
Θελω να συγκρινω δυο αρχεια μονο, οχι πολλα μαζι, αλλα θελω σε λιγα δευτερολεπτα να εχω το αποτελεσμα τη συγκρισης. Φυσικα θελω αξιοπιστια γιατι εστω και 1 byte να αλλαζει τοτε τα αρχεια ειναι διαφορετικα.

Ωραία λοιπόν, ΔΥΟ αρχεία (όσο πιο συγκεκριμένο το κάνεις, τόσο πιο χρήσιμη απάντηση θα παίρνεις). Άρα ο γρηγορότερος τρόπος είναι ΣΙΓΟΥΡΑ η σύγκριση byte-to-byte με χρήση κάποιου buffer (πχ 5-10ΜΒ ανά αρχείο τουλάχιστον, μνήμη υπάρχει αρκετή πια σε όλα τα συστήματα). Αν σε ενδιαφέρει ως αποτέλεσμα μόνο το αν είναι ίδια ή όχι, σταματάς μόλις βρεθεί byte που διαφέρει. Εννοείται από την αρχή πως τσεκάρεις πρώτα το μέγεθος (το αν θα συνεχίσεις σε περίπτωση διαφορετικού μεγέθους, εξαρτάται αν θες να βρεις τα κουτσουρουμένα αρχεία).

 

Στο site της υπογραφής μου έχω φτιάξει από παλιά το "File Comparator" που λειτουργεί ακριβώς με αυτόν τον τρόπο. Βέβαια είναι σε C, όχι σε VB, οπότε δεν μπορώ να σε βοηθήσω σε κώδικα.

  • Απαντ. 39
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

Για γρηγορο τσεκαρισμα.

Αρχειο Α

Αρχειο Β

 

 

Αν Μεγεθος(Α) Δεν ειναι ισο Μεγεθος(Β) Τοτε Αποτελεσμα: Δεν ειναι ιδια

 

Αν ΔοσεΚοματι(Α,(απο) Μεγεθος(Α)/2,(μεχρι) (Μεγεθος(Α)/2)+4)

Δεν ειναι ισο με ΔοσεΚοματι(Β,(απο) Μεγεθος(Β)/2,(μεχρι) (Μεγεθος(Β)/2)+4)

Και

ΔοσεΚοματι(Α,(απο) Μεγεθος(Α)/4,(μεχρι) (Μεγεθος(Α)/4)+4)

Δεν ειναι ισο με ΔοσεΚοματι(Β,(απο) Μεγεθος(Β)/4,(μεχρι) (Μεγεθος(Β)/4)+4)

Και

ΔοσεΚοματι(Α,(απο) Μεγεθος(Α)/8,(μεχρι) (Μεγεθος(Α)/8)+4)

Δεν ειναι ισο με ΔοσεΚοματι(Β,(απο) Μεγεθος(Β)/8,(μεχρι) (Μεγεθος(Β)/8)+4)

Τοτε: Δεν ειναι ιδια

 

Τελος το κανεις Byte to Byte

Δημοσ.

Στηριζετε στοις πιθανοτητς. ενα byte εχει 255 τημες,

αρα

255*4 = 1020 πιθανοτητες :confused: αρα 1/1020 να πετυχεις

και το παραπανω το κανεις σε 3 σημεια, λιγο δυσκολο να το πετυχεις ;)

Δημοσ.

Δεν κατάλαβα την εξήγηση που δίνεις. Κατά πρώτον, ένα byte έχει 256 δυνατές τιμές και όχι 255 (όχι πως έχει ιδιαίτερη σημασία). Και κατά δεύτερον, ξεκινώντας μία byte προς byte σύγκριση ήδη στα πρώτα 3 ζεύγη bytes έχεις κάνει σύγκριση 3 θέσεων-σημείων και η πιθανότητα αυτά να είναι ίδια ή διαφορετικά δεν υπάρχει λόγος να είναι διαφορετική σε σχέση με την περίπτωση που θα επέλεγες τα 3 σημεία που ανέφερες.

Δημοσ.

Well, στην πράξη όταν θα κάνει byte to byte θα ξαναγίνει έλεγχος των bytes που τσέκαρε τυχαία. Αλλά ok είναι σχεδόν ίδια

Δημοσ.

geo1st487

αν αυτο που θες ειναι

1. να συγκρινεις 2 (και μονο) αρχεια ΚΑΙ θελεις να εισαι απολυτα σιγουρος για το αποτελεσμα, η καλυτερη λυση ειναι byte-to-byte συγκριση.

2. να βρεις σε ενα φακελλο αν υπαρχουν αρχεια που ειναι ιδια μεταξυ τους (εγω αυτο καταλαβα στην αρχη) τοτε ειναι πιο γρηγορο (ισως) το checksum γιατι αντι να συγκρινεις το καθε αρχειο με ολα τα υπολοιπα, κανεις ενα checksum στο καθενα και συγκρινεις τα checksums μεταξυ τους (γρηγοροτερο)

 

διαλεγεις αναλογα το προβλημα

Δημοσ.
2. να βρεις σε ενα φακελλο αν υπαρχουν αρχεια που ειναι ιδια μεταξυ τους (εγω αυτο καταλαβα στην αρχη) τοτε ειναι πιο γρηγορο (ισως) το checksum γιατι αντι να συγκρινεις το καθε αρχειο με ολα τα υπολοιπα, κανεις ενα checksum στο καθενα και συγκρινεις τα checksums μεταξυ τους (γρηγοροτερο)

Η μόνη περίπτωση να είναι γρηγορότερο είναι αν τα - πολλά - αρχεία είναι σχεδόν αντίγραφα και τα ελάχιστα διαφορετικά τους bytes βρίσκονται προς το τέλος των αρχείων. Μιλάμε τώρα για "περίπτωση". Στην κακή περίπτωση που τα αρχεία είναι μεγάλα σε μέγεθος αλλά διαφέρουν σε μερικά σημεία, το να υπολογίζεις checksum μπορεί να πάρει 100πλάσιο χρόνο (και λίγο λέω) από τον απευθείας έλεγχο των bytes. ;)

 

Πάντως, σίγουρα για κάποιον αρχάριο είναι πάρα πολύ ευκολότερο να υλοποιήσει επιτυχώς τη λύση με τα checksums. (Ένας από τους λόγους που τα περισότερα αντι-duplicate προγράμματα που κυκλοφορούν είναι GTP.)

 

Τα πλεονεκτήματα της μεθόδου υπολογισμού checksum έχουν εφαρμογή σε τελείως άλλα πράγματα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...