[Παίζει μουσική] ROB BOWDEN: Hi. Είμαι Rob, και ας ελπίσουμε ότι η λύση αυτή σας βοηθά να βάλετε στο δρόμο προς την ανάκαμψη. Οπότε ας ξεκινήσουμε. Βλέπουμε ότι αμέσως είμαστε ακριβώς για να βεβαιωθείτε ότι είμαστε χρησιμοποιώντας ανακτήσει σωστά. Έτσι, η χρήση του θα πρέπει απλώς να είναι κάτι όπως dot κάθετος ανακάμψει. Τώρα θα πάμε να ανοίξει το αναμενόμενο κάρτα dot ακατέργαστο αρχείο. Βλέπουμε εδώ ότι είμαστε χρησιμοποιώντας το σταθερή πρώτες υπογράμμισης όνομα αρχείου, ποια εδώ έχουμε hash ορίζεται ως κάρτα dot πρώτων. OK. Γι 'αυτό και πρέπει να βεβαιωθείτε ότι η άνοιξε με επιτυχία, διότι αν δεν, τότε θα πρέπει να προειδοποιεί τον χρήστη. Αλλά και αν υποτεθεί ότι το έκανε, είμαστε τώρα πρόκειται να κηρύξει buffer μεγέθους JPEG αρχείο μήκος του ονόματος. Έτσι, αυτό πρόκειται να είναι το ρυθμιστικό που θα πάμε να sprintf σε. Έτσι τι είναι το αρχείο μήκος ονόματος JPEG; Μέχρι εδώ, βλέπουμε ότι είναι hash ορίζεται ως οκτώ. Γιατί λοιπόν οκτώ; Καλά ένα συγκεκριμένο αρχείο θα ονομαστεί κάτι σαν το μηδέν μηδέν μηδέν. JPG και, στη συνέχεια, χρειαζόμαστε μια ανάστροφη κάθετο μηδέν. Έτσι, χρειαζόμαστε ένα ρυθμιστικό που μπορεί να αποθηκεύουν οκτώ χαρακτήρες. Τώρα θα πάμε να έχουν ένα μετρητή που είναι πρόκειται να παρακολουθείτε το Αριθμός JPEGs βρήκαμε. Και τέλος, θα πάμε να έχουν μια Αρχείο JPEG το οποίο αρχικά είναι null η οποία πρόκειται να είναι η επί του παρόντος ανοιχτό αρχείο που γράφουμε για. Τώρα θα πάμε να έχουν ένα πρόσθετο buffer. Αυτό δεν είναι το ίδιο όπως sprintf μας όπου αυτό ρυθμιστικό διάλυμα είναι το ένα ότι διαβάζετε στα δεδομένα από την κάρτα dot πρώτων. Έτσι, το ρυθμιστικό διάλυμα πρόκειται να είναι του ανυπόγραφο χαρακτήρες, το οποίο μπορείτε να βασικά ακριβώς μας αντιμετωπίζουν bytes, και είναι πρόκειται να είναι του μεγέθους block όπου, όπως θα σας πω, μέγεθος μπλοκ είναι 512. Έτσι, αρχεία JPEG μπορεί να θεραπεύσει τα πάντα ως μπλοκ 512 bytes. Τώρα θα πάμε να βρόχο σε όλο το αρχείο. Εμείς πάμε για να στ διαβάσετε σε ρυθμιστικό μας ένα ενιαίο φορές byte μέγεθος μπλοκ από η κάρτα dot ακατέργαστο αρχείο. Τώρα τι σημαίνει στ διαβάσει επιστρέψει; Επιστρέφει τον αριθμό των στοιχείων ότι διαβάστηκε επιτυχώς. Έτσι, αν καταφέρει να διαβάσει 512 bytes, τότε θέλουμε να δούμε αν αυτό ήταν ένα JPEG ή να το γράψετε σε ένα αρχείο JPEG. Και αν δεν επιστρέψει 512 bytes, τότε είτε το αρχείο κατέληξε σε ποια περίπτωση θα ξεφύγει από το y βρόχου, ή υπάρχει κάποιο είδος σφάλματος περίπτωση κατά την οποία επίσης θα ξεφύγει από ο βρόχος y, αλλά θα θέλετε να καταγγείλετε ότι κάτι πήγε στραβά. OK. Έτσι, υποθέτοντας ότι έχουμε διαβάσει με επιτυχία 512 bytes, θέλουμε να τον πρώτο έλεγχο να κάνουν ότι αυτοί bytes που θα μόλις διάβασα σε ξεκινήσει μια JPEG. Έτσι, αν είναι κεφαλίδα JPEG ρυθμιστικού μας. Τώρα τι κάνει κεφαλίδα JPEG; Ας ρίξουμε μια ματιά. Μέχρι εδώ, βλέπουμε ότι αυτή η λειτουργία είναι επιστρέφοντας έναν ταύρο, και ότι ταύρος - καλά εδώ, είμαστε έλεγχο για να δούμε αν header ισούται με το μηδέν αυτή η διαρκής και header ένα ίσον αυτή η διαρκής και κεφαλίδα δύο ισούται με τη σταθερά, header τρεις ισούται με αυτό ή αυτό σταθερή πού είναι όλοι αυτοί οι σταθερές απλά hash ορίζεται εδώ και είναι ακριβώς αυτό που σας είπα στο spec ότι ένα JPEG ξεκινά με. Και έτσι αυτή η λειτουργία είναι ακριβώς πρόκειται να επιστρέφει true αν αυτό αντιπροσωπεύει buffer η αρχή μιας νέας JPEG και ψευδείς διαφορετικά. OK. Έτσι, αν το γεγονός αυτό αποτελεί μια νέα μορφή JPEG, τότε θα πρέπει πρώτα να ελέγξετε για να δείτε αν Αρχείο JPEG δεν είναι ίση με null, στην οποία περίπτωση το κλείσετε. Και γιατί λοιπόν πρέπει να ελέγξετε για να δούμε αν δεν είναι null; Λοιπόν το πρώτο πολύ JPEG ότι εμείς ανακαλύψουμε ότι δεν θα έχουν ήδη ένα ανοιχτό αρχείο JPEG. Και έτσι, αν προσπαθήσουμε να κλείσει αυτό, τότε εμείς δεν κάνουμε κάτι πολύ σωστό. Αλλά κάθε μεταγενέστερη JPEG που ανοίγουμε, θέλουμε να κλείσουμε το προηγούμενο αρχείο. Έτσι τώρα θα πάμε να χρησιμοποιήσετε sprintf όπως εμείς είπε πριν, όπου είμαστε χρησιμοποιώντας το όνομα αρχείου ρυθμιστικό JPEG. Και θα πάμε να χρησιμοποιήσετε το αρχείο JPEG αναφέρουμε μορφή ως μορφή μας. Και τι είναι αυτό; Μέχρι εδώ, βλέπουμε ότι είναι εκατό τοις μηδέν 3D.JPEG όπου το μηδέν μόλις τρεις λέει ότι θα χρησιμοποιήσει τρεις ακέραιους γι 'αυτό παραγεμισμένο με μηδενικά. Έτσι, αυτό είναι το πώς θα πάρει μηδέν μηδέν one.JPEG και μηδενική 10.JPEG και ούτω καθεξής. Εμείς πάμε για να χρησιμοποιήσετε το sprintf. Και ο ακέραιος που είμαστε εισαγωγή σε το string είναι μουδιασμένος αρχεία JPEG ανακτηθεί, το οποίο είναι αρχικά μηδέν. Έτσι, το πρώτο αρχείο άνοιξε πρόκειται να είναι μηδέν μηδέν μηδέν dot JPEG. Και τότε θα φαινόταν ότι προσαύξηση, ώστε η επόμενο αρχείο που θα ανοίξει μηδέν μηδέν μία τελεία JPEG και θα το αυξήσετε και πάλι έτσι θα είναι μηδέν μηδέν δύο dot JPEG και ούτω καθεξής. Εντάξει. Έτσι τώρα το εσωτερικό του αρχείου JPEG το όνομα, έχουμε το όνομα του το αρχείο που θέλουμε. Μπορούμε στ ανοίξετε το αρχείο για το γράψιμο. OK. Και για άλλη μια φορά, θα πρέπει να ελέγξετε για να βεβαιωθείτε βεβαιωθείτε ότι το αρχείο με επιτυχία άνοιξε αφού αν δεν είχε, στη συνέχεια, υπήρξε κάποια σφάλμα. Έτσι τώρα έχουμε πάρει το παρελθόν του αυτό είναι ένα μέρος JPEG. Και εδώ, θα δούμε θα πάμε για να γράψει με το φορμά JPEG. Αλλά έχουμε πρώτα τον έλεγχο αυτό που λέει εάν το αρχείο JPEG δεν είναι ίσο με null. Γιατί χρειαζόμαστε αυτό; Καλά αρχείο JPEG ισούται με null όταν σήμερα έχουν μια ανοικτή JPEG. Τι θα συμβεί αν dot πρώτη κάρτα ξεκινά με μια δέσμη των bytes που δεν αντιπροσωπεύουν JPEG; Στη συνέχεια, θα πάμε να θέλουν να υπερπηδήσει αυτά τα bytes. Αν δεν έχουμε τον έλεγχο αυτό, τότε είμαστε πρόκειται να γράψω σε ένα κλειστό καταθέσει τα πρώτα 512 bytes η κάρτα η οποία δεν είναι καλό. OK. Έτσι, υποθέτοντας έχουμε ένα ανοιχτό αρχείο, στη συνέχεια, θα πάμε να γράψει σε αυτό το αρχείο το 512 bytes που έχουμε στο ρυθμιστικό μας. Και είμαστε για άλλη μια φορά τον έλεγχο για να βεβαιωθείτε ότι οι 512 bytes επιτυχία γράφτηκαν γιατί αν δεν ήταν με επιτυχία γραπτές, στη συνέχεια, κάτι πήγε στραβά. Θα κλείσει τα αρχεία μας, να εκτυπώσετε ότι κάτι πήγε στραβά, και την επιστροφή. Υποθέτοντας ότι όλα πάνε σωστά, τότε εμείς θα συνεχίσουμε looping το κλείσιμο της παλιό αρχείο, ανοίγοντας το νέο αρχείο, το γράψιμο δεδομένων στο νέο αρχείο και έτσι για μέχρι το τέλος, αυτό το f διαβάσετε επιστρέφει την τιμή μηδέν τα οποία μέσα ότι το αρχείο έχει γίνει. Έτσι, τώρα που η ανάγνωση καρτών είναι πάνω, εμείς δείτε ότι πρόκειται να κλείσει το f το τελευταίο αρχείο που είχαμε ανοιχτή, αλλά είμαστε έλεγχο εάν το αρχείο JPEG δεν ισούται με null. Καλά η f τείνει νόημα διότι, όπως είμαστε το άνοιγμα αρχείων, κλείνουμε το προηγούμενο αρχείο, αλλά η τελευταία αρχείο που ανοίξαμε ποτέ δεν παίρνει κλειστά. Έτσι, αυτό είναι τι κάνει αυτό. Αλλά γιατί θα πρέπει να ελέγξετε για null; Λοιπόν τι θα γινόταν αν dot πρώτη κάρτα δεν έκανε έχουν ένα ενιαίο JPEG μέσα από αυτό; Σε αυτή την περίπτωση, θα έχουμε ποτέ δεν άνοιξε ένα αρχείο. Και αν δεν έχουμε ανοίξει ένα αρχείο, θα πρέπει να Δεν προσπαθείτε να κλείσετε το αρχείο. Οπότε αυτό είναι που αυτός ο έλεγχος να κάνει. Τώρα εδώ, όπως είπα και πριν, θα μπορούσαμε να έχει ξεσπάσει αυτή βρόχο y, είτε εάν η κάρτα έχει λήξει ή αν υπάρχουν κάποιο λάθος ανάγνωση από την κάρτα. Έτσι, αυτό τον έλεγχο για να δει αν υπήρχε Παρουσιάστηκε σφάλμα κατά την ανάγνωση από την κάρτα, σε οποία περίπτωση, εμείς θα πούμε εκεί ήταν το μήνυμα λάθους. Δεν θέλουμε ο χρήστης να σκέφτεται όλα πήγαν με επιτυχία. Και εμείς θα επιστρέψει ένα για το λάθος. Τέλος, θα στ κλείσει ακατέργαστο αρχείο μας, κάρτα μας dot ωμά, για να δείξει ότι όλα πήγαν καλά και επιστροφή το μηδέν και αυτό είναι όλο. Το όνομά μου είναι Rob και αυτό ήταν Ανάκτηση. [Παίζει μουσική]