ΟΜΙΛΗΤΗΣ: Μέχρι στιγμής, είναι πιθανό ότι τα περισσότερα από τα προγράμματά σας να ήταν λίγο εφήμερο. Μπορείτε να εκτελέσετε ένα πρόγραμμα όπως το Mario ή άπληστοι. Κάνει κάτι, ίσως ζητά ο χρήστης για κάποιες πληροφορίες, εκτυπώσετε κάποια έξοδος στην οθόνη, αλλά στη συνέχεια, όταν το πρόγραμμά σας είναι πάνω, δεν υπάρχει πραγματικά καμία απόδειξη υπάρχει είχε τρέξει ποτέ στην πρώτη θέση. Θέλω να πω, σίγουρα, θα μπορούσε να είχε αφήσει να ανοίξει το παράθυρο του τερματικού, αλλά αν καταργήσετε την οθόνη σας, υπάρχει Πραγματικά, δεν υπάρχει απόδειξη ότι υπήρχε. Δεν έχουμε ένα μέσο αποθήκευσης επίμονες πληροφορίες, πληροφορίες ότι υπάρχει μετά μας το πρόγραμμα έχει σταματήσει να τρέχει, ή δεν έχουμε μέχρι αυτό το σημείο. Ευτυχώς όμως, γ κάνει μας δίνουν τη δυνατότητα για να το κάνετε αυτό με την εφαρμογή κάτι που ονομάζεται ένα αρχείο, μια δομή που ουσιαστικά αντιπροσωπεύει ένα αρχείο που θα διπλασιαστεί κάντε κλικ στον υπολογιστή σας, αν είστε που χρησιμοποιούνται σε ένα γραφικό περιβάλλον χρήστη. Γενικά, όταν εργάζονται με c, στην πραγματικότητα είμαστε πρόκειται να εργάζονται με δείκτες για να files-- αρχείο stars-- εκτός για λίγο όταν μιλάμε για ένα ζευγάρι από τις λειτουργίες που συνεργαστεί με δείκτες αρχείο. Δεν χρειάζεται να έχουν πραγματικά σκάψει πάρα πολύ βαθιά στην κατανόηση δείκτες οι ίδιοι. Υπάρχει μια μικρή teeny λίγο όπου θα μιλήσουμε γι 'αυτούς, αλλά γενικά το αρχείο δείκτες και δείκτες, ενώ αλληλένδετα, Δεν είναι ακριβώς το ίδιο πράγμα. Τώρα τι εννοώ όταν Λέω επίμονη δεδομένα; Τι είναι η επίμονη δεδομένα; Γιατί μας νοιάζει γι 'αυτό; Ας πούμε, για παράδειγμα, ότι τρέχετε ένα πρόγραμμα ή έχετε ένα ξαναγραφεί πρόγραμμα το οποίο είναι ένα παιχνίδι, και θέλετε να παρακολουθείτε όλων των κινήσεων του χρήστη έτσι ώστε ίσως αν κάτι πάει στραβά, μπορείτε να ελέγξετε το αρχείο μετά το παιχνίδι. Αυτό είναι που εννοούμε όταν μιλήσουμε για επίμονη δεδομένα. Κατά τη διάρκεια της λειτουργίας σας προγράμματος, δημιουργείται ένα αρχείο. Και όταν το πρόγραμμά σας έχει σταματήσει να τρέχει, ότι εξακολουθεί να υπάρχει το αρχείο στο σύστημά σας. Και μπορούμε να το κοιτάξετε και να την εξετάσει. Και έτσι το πρόγραμμα αυτό θα πρέπει να οριστεί σε έχουν δημιουργήσει κάποια σταθερά δεδομένα, υπάρχουν δεδομένα μετά το πρόγραμμα έχει ολοκληρωθεί η εκτέλεση. Τώρα όλες αυτές τις λειτουργίες που λειτουργούν με τη δημιουργία αρχείων και το χειρισμό τους με διάφορους τρόπους ζουν στο πρότυπο io.h, το οποίο είναι ένα αρχείο κεφαλίδας που έχετε πιθανόν ήταν λίρα συμπεριλαμβανομένου στην κορυφή της πολύ πολύ όλα τα προγράμματά σας επειδή περιέχει ένα από τα πιο χρήσιμες λειτουργίες για μας, printf, η οποία σας επιτρέπει επίσης Ζει στο πρότυπο io.h. Έτσι, δεν χρειάζεται να σφυροκοπήσει περιλαμβάνουν τυχόν πρόσθετα αρχεία πιθανώς προκειμένου να συνεργαστεί με τους δείκτες αρχείο. Τώρα, κάθε λειτουργία δείκτης του αρχείου, ή κάθε αρχείο I / O, εισόδου-εξόδου λειτουργία, δέχεται ως μία τις παραμέτρους ή τις εισόδους του pointer-- ένα αρχείο, εκτός για ένα, fopen, η οποία είναι ό, τι μπορείτε να χρησιμοποιήσετε για να πάρετε το αρχείο δείκτη στην πρώτη θέση. Αλλά αφού έχετε ανοίξει το αρχείο και μπορείτε να πάρετε το αρχείο δείκτες, μπορείτε στη συνέχεια να τους περάσει ως επιχειρήματα για τις διάφορες λειτουργίες θα πάμε να μιλήσουμε για σήμερα, καθώς επίσης και πολλοί άλλοι έτσι ώστε να μπορείτε να εργαστείτε με τα αρχεία. Έτσι, υπάρχουν έξι πολύ κοινά βασικά μέτρα ότι θα πάμε να μιλήσουμε σήμερα. fopen και σύντροφος του fclose λειτουργία, fgetc και τη λειτουργία σύντροφος fputc του, και fread και τη λειτουργία σύντροφό του, fwrite. Έτσι, ας πάμε σε αυτό. fopen-- τι κάνει; Λοιπόν, ανοίγει ένα αρχείο και σας δίνει ένα δείκτη αρχείου για να το, έτσι ώστε να μπορείτε να χρησιμοποιήσετε στη συνέχεια ότι αρχείο δείκτη ως επιχείρημα προς οποιοδήποτε άλλο αρχείο I / O λειτουργίες. Το πιο σημαντικό πράγμα για να θυμούνται με fopen είναι ότι αφού έχετε ανοίξει το file ή να κάνει μια κλήση, όπως αυτή εδώ, θα πρέπει να ελέγξετε για να βεβαιωθείτε ότι ότι ο δείκτης που έχεις πίσω δεν είναι ίση με null. Αν δεν έχετε παρακολουθήσει το βίντεο δείκτες, αυτό δεν μπορούσε να έχει νόημα. Αλλά αν προσπαθήσετε και dereference ένα κενό δείκτη ανάκληση, το πρόγραμμά σας κατά πάσα πιθανότητα θα υποφέρουν α τμηματοποίησης [δεν ακούγεται]. Θέλουμε να βεβαιωθούμε ότι θα πήρε ένα νόμιμο δείκτη πίσω. Η συντριπτική πλειοψηφία του χρόνου θα έχουμε έχουν πάρει ένα νόμιμο δείκτη πίσω και δεν θα είναι ένα πρόβλημα. Λοιπόν, πώς θα κάνουμε μια πρόσκληση για fopen; Φαίνεται λίγο πολύ σαν αυτό. Αστέρι αρχείου ptr-- PTR είναι ένα γενικό όνομα για το αρχείο pointer-- fopen και περνάμε σε δύο πράγματα, ένα όνομα αρχείου και μια λειτουργία που θέλουμε να αναλάβουμε. Έτσι, θα μπορούσαμε να έχουμε μια κλήση που μοιάζει με this-- ptr αστέρων αρχείων 1 ισούται με fopen file1.txt. Και η λειτουργία που έχω επιλέξει είναι r. Λοιπόν, τι νομίζεις ότι r είναι εδώ; Ποια είναι τα είδη των πραγμάτων που μπορεί να είναι σε θέση να κάνει με τα αρχεία; Έτσι, το r είναι η εργασία που θα επιλέγουν πότε θέλουμε να διαβάσουμε ένα αρχείο. Γι 'αυτό και θα ήταν ουσιαστικά όταν κάνουμε μια κλήση όπως αυτό να πάρει τον εαυτό μας ένα δείκτη αρχείο έτσι ώστε να μπορούμε στη συνέχεια να διαβάσει πληροφορίες από file1.txt. Ομοίως, θα μπορούσαμε να ανοίξουμε το αρχείο 2.txt για τη σύνταξη και έτσι μπορούμε να περάσουμε pTR2, ο δείκτης του αρχείου που έχω δημιουργήσει εδώ, ως επιχείρημα για κάθε λειτουργία που γράφει τις πληροφορίες σε ένα αρχείο. Και παρόμοιο με το γράψιμο, υπάρχει επίσης η επιλογή να προσθέσει ένα. Η διαφορά μεταξύ γραφή και προσαρτώντας είναι ότι όταν γράφετε σε ένα αρχείο, αν κάνετε μια κλήση για να fopen για το γράψιμο και αυτό το αρχείο υπάρχει ήδη, είναι πρόκειται να αντικαταστήσετε ολόκληρο το αρχείο. Είναι πρόκειται να ξεκινήσει στην αρχή, διαγράφοντας όλες τις πληροφορίες ότι είναι ήδη εκεί. Ενώ αν το ανοίξετε για προσάρτηση, θα πάτε στο τέλος του αρχείου αν υπάρχει ήδη στο κείμενο αυτό ή πληροφορίες σε αυτό, και στη συνέχεια θα αρχίσει εγγράφως από εκεί. Έτσι δεν θα χάσετε καμία από τις πληροφορίες που έχετε κάνει στο παρελθόν. Είτε θέλετε να γράψετε ή να επισυνάψει το είδος της εξαρτάται από την κατάσταση. Αλλά θα πρέπει πιθανώς να ξέρετε ποια είναι η σωστή λειτουργία είναι, όταν έρθει η ώρα. Έτσι ώστε να είναι fopen. Τι γίνεται με fclose; Λοιπόν, αρκετά απλά, fclose απλώς αποδέχεται το δείκτη αρχείου. Και όπως μπορείτε να φανταστείτε, κλείνει το αρχείο. Και από τη στιγμή που έχουμε κλείσει ένα αρχείο, δεν μπορούμε εκτελούν πια αρχείο λειτουργίες I / O, ανάγνωση ή την εγγραφή, στο αρχείο αυτό. Πρέπει να ανοίξει εκ νέου η αρχείο κάποια άλλη στιγμή, προκειμένου να συνεχίσει να εργάζεται με χρησιμοποιώντας τις λειτουργίες I / O. Έτσι fclose μέσα τελειώσαμε που εργάζονται με αυτό το αρχείο. Και το μόνο που χρειάζεται για να περάσει in είναι το όνομα του δείκτη αρχείου. Έτσι, σε ένα ζευγάρι διαφάνειες πριν, fopened αρχείο 1 τελεία κειμένου για την ανάγνωση και βάλαμε ότι αρχείο δείκτη σε ρΤΡ1. Τώρα έχουμε αποφασίσει είμαστε τελειώσετε την ανάγνωση από το αρχείο. Εμείς δεν χρειάζεται να κάνουμε πια με αυτό. Μπορούμε απλά fclose ρΤΡ1. Και ομοίως, θα μπορούσαμε fclose τις άλλες. Εντάξει. Έτσι ώστε να είναι το άνοιγμα και το κλείσιμο. Αυτοί είναι οι δύο βασικές την έναρξη των ενεργειών. Τώρα θέλουμε πραγματικά να κάνετε κάποια ενδιαφέροντα πράγματα, και η πρώτη λειτουργία που θα δείτε ότι θα κάνει ότι είναι fgetc-- αρχείο πάρει ένα χαρακτήρα. Αυτό είναι ό, τι γενικά fgetc θα μεταφραστεί σε. Ο στόχος του στη ζωή είναι να διαβάστε τον επόμενο χαρακτήρα, ή αν αυτό είναι πολύ σας πρώτη κλήση fgetc για ένα συγκεκριμένο αρχείο, ο πρώτος χαρακτήρας. Στη συνέχεια, όμως μετά από αυτό, μπορείτε να πάρετε το επόμενο, την επόμενη κιόλας χαρακτήρα αυτού του αρχείου, και την αποθηκεύει σε μια μεταβλητή χαρακτήρα. Όπως έχουμε κάνει εδώ, char ch ισούται fgetc, περνούν στο όνομα του δείκτη αρχείου. Και πάλι, είναι πολύ σημαντικό εδώ να θυμόμαστε ότι, προκειμένου να έχουμε Αυτή η λειτουργία πετύχει, ο ίδιος ο δείκτης του αρχείου must've έχουν ανοίξει για την ανάγνωση. Δεν μπορεί να διαβάσει ένα χαρακτήρα από ένα αρχείο δείκτη που ανοίξαμε για το γράψιμο. Έτσι, αυτό είναι ένα από τα περιορισμούς της fopen, σωστά; Πρέπει να περιορίσεις τους εαυτούς μας για να εκτελεί μόνο μια επιχείρηση με ένα δείκτη αρχείου. Αν θέλαμε να διαβάζουν και να γράψει από το ίδιο αρχείο, θα έχουμε ανοικτές δύο χωριστές δείκτες αρχείο με το ίδιο file-- ένα για την ανάγνωση, το ένα για το γράψιμο. Έτσι και πάλι, ο μόνος λόγος Φέρνω ότι μέχρι τώρα είναι γιατί αν θα πάμε για να πραγματοποιήσετε μια κλήση να fgetc, ότι δείκτης του αρχείου must've έχουν ανοίξει για την ανάγνωση. Και τότε πολύ απλά, το μόνο που χρειάζεται να κάνουμε είναι να περάσει στο όνομα του δείκτη αρχείου. Έτσι, char ch ισούται fgetc ρΤΡ1. Αυτό πρόκειται να μας πάρει Η επόμενη character-- ή πάλι, εάν αυτή είναι η πρώτη φορά έχουμε κάνει αυτήν την κλήση, η πρώτη character-- του ανεξαρτήτως αρχείο δείχνεται από ρΤΡ1. Θυμηθείτε ότι αυτό ήταν το αρχείο κειμένου 1 τελεία. Θα πάρει τον πρώτο χαρακτήρα που και θα το αποθηκεύσει στη μεταβλητή ch. Αρκετά απλή. Έτσι, έχουμε εξετάσει μόνο σε τρεις λειτουργίες και ήδη έχουμε μπορεί να κάνει κάτι πολύ πετυχημένος. Έτσι, αν πάρουμε αυτή την ικανότητα να πάρει ένα χαρακτήρα και εμείς βρόχο it-- έτσι συνεχίζουν να πάρει χαρακτήρες από ένα αρχείο και πάνω πάνω και over-- τώρα μπορεί να διαβάσει κάθε χαρακτήρας ενός αρχείου. Και αν θέλουμε να εκτυπώσετε κάθε χαρακτήρα αμέσως μετά το διαβάσουμε, τώρα έχουμε διαβάσει από ένα αρχείο και τυπωμένο το περιεχόμενό της στην οθόνη. Έχουμε αποτελεσματικά συνεχόμενα αυτό το αρχείο στην οθόνη. Και αυτό είναι ό, τι η Linux εντολή cat κάνει. Αν πληκτρολογήσετε γάτα στο όνομα του αρχείου του, θα εκτυπώσει όλο το περιεχόμενο του αρχείου στο παράθυρο του τερματικού σας. Και έτσι αυτό το μικρό βρόχο εδώ, μόνο τρεις γραμμές κώδικα, αλλά αναπαράγει αποτελεσματικά η γάτα εντολών του Linux. Έτσι, αυτή η σύνταξη θα μπορούσε φαίνονται λίγο περίεργα, αλλά εδώ είναι ό, τι συμβαίνει εδώ. Ενώ ch ισούται fgetc, PTR δεν είναι ίσο με EOF-- είναι μια ολόκληρη μπουκιά, αλλά ας το σπάσει μόνο έτσι ώστε να είναι σαφής ως προς την σύνταξη. Έχω εδραίωσε για λόγους χώρου, αν και είναι λίγο συντακτικά δύσκολο. Έτσι, αυτό το μέρος σε πράσινο σωστά τώρα, τι κάνει; Λοιπόν, αυτό είναι ακριβώς κλήση fgetc μας, σωστά; Έχουμε δει ότι πριν. Είναι απόκτηση ενός χαρακτήρα από το αρχείο. Στη συνέχεια συγκρίνουμε ότι χαρακτήρα ενάντια ΕΟΦ. ΕΟΦ είναι μια ιδιαίτερη τιμή που είναι σύμφωνα με το πρότυπο io.h, η οποία είναι το τέλος του χαρακτήρα του αρχείου. Έτσι, βασικά, τι πρόκειται να συμβεί Είναι αυτός ο βρόχος θα διαβάσει ένα χαρακτήρα, συγκρίνετε με ΕΟΦ, η χαρακτήρα τέλους αρχείου. Αν δεν ταιριάζουν, οπότε δεν έχουμε φθάσει στο τέλος του αρχείου, θα εκτυπώσετε αυτό το χαρακτήρα έξω. Στη συνέχεια, θα πάμε πίσω στο ξεκινώντας από το βρόχο και πάλι. Θα πάρετε ένα χαρακτήρα, ελέγξτε κατά ΕΟΦ, να το τυπώσετε έξω, και ούτω καθεξής και ούτω καθεξής και ούτω καθεξής, looping μέσω αυτόν τον τρόπο έως ότου έχουμε φτάσει στο τέλος του αρχείου. Και στη συνέχεια με αυτό το σημείο, θα έχουμε εκτυπωθεί έξω όλο το περιεχόμενο του αρχείου. Έτσι και πάλι, έχουμε δει μόνο fopen, fclose, και fgetc και ήδη μπορούμε να επαναλάβει μια Linux εντολή τερματικού. Όπως είπα και στην αρχή, είχαμε fgetc και fputc, και fputc ήταν ο σύντροφος λειτουργία της fgetc. Και έτσι, όπως μπορείτε να φανταστείτε, είναι το ισοδύναμο γραφή. Μας επιτρέπει να γράφετε μόνο χαρακτήρα σε ένα αρχείο. Και πάλι, η προειδοποίηση είναι, απλά σαν να ήταν με fgetc, το αρχείο ότι γράφουμε για να must've ήταν άνοιξε για τη γραφή ή για προσάρτηση. Αν προσπαθήσουμε και να χρησιμοποιούν fputc σε ένα αρχείο ότι ανοίξαμε για την ανάγνωση, θα πάμε να υποφέρουν ένα κομμάτι από ένα λάθος. Αλλά η κλήση είναι αρκετά απλή. fputc κεφαλαίου Α pTR2, όλα ότι πρόκειται να κάνουμε είναι ότι είναι πρόκειται να γράψω το γράμμα σε Α σε αρχείο 2 κουκίδα κείμενο, το οποίο ήταν το όνομα του αρχείο που ανοίξαμε και αποδίδεται ο δείκτης pTR2. Έτσι θα πάμε να γράψει ένα Ένα κεφάλαιο σε αρχείο κειμένου 2 κουκίδα. Και θα γράψω ένα επιφώνημα το σημείο στο αρχείο 3 dot κείμενο, το οποίο υποδεικνύεται από ρίτ3. Έτσι και πάλι, αρκετά απλή εδώ. Αλλά τώρα μπορούμε να κάνουμε κάτι άλλο. Έχουμε αυτό το παράδειγμα ήμασταν ακριβώς που πηγαίνει πέρα ​​από για να είναι σε θέση να αναπαραγάγει τη γάτα Εντολών του Linux, αυτό που εκτυπώνει στην οθόνη. Λοιπόν, τώρα που έχουμε την δυνατότητα να διαβάζει χαρακτήρες από τα αρχεία και γράψτε τους χαρακτήρες σε αρχεία, γιατί δεν μπορούμε απλά να υποκαταστήσει ότι καλούν να printf με μια κλήση στο fputc. Και τώρα έχουμε διπλές cp, μια πολύ βασική εντολή του Linux ότι μιλήσαμε για τον τρόπο καιρό Πριν από το Linux εντολές βίντεο. Έχουμε αποτελεσματικά αναπαραχθεί αυτό το δικαίωμα εδώ. Είμαστε διαβάζοντας ένα χαρακτήρα και στη συνέχεια είμαστε γράφοντας ότι ο χαρακτήρας σε ένα άλλο αρχείο. Ανάγνωση από ένα αρχείο, το γράψιμο σε ένα άλλο, ξανά και ξανά και ξανά μέχρι να χτυπήσει τον ΕΟΦ. Έχουμε μέχρι το τέλος της αρχείο που προσπαθείτε να αντιγράψετε. Και από ότι θα έχουμε γράψει όλα των χαρακτήρων θα πρέπει να το αρχείο ότι γράφουμε για να. Έτσι, αυτό είναι CP, η εντολή αντίγραφο του Linux. Κατά την αρχή της Αυτό το βίντεο, είχα την προειδοποίηση ότι θα μιλήσουμε λίγο για τους δείκτες. Εδώ είναι ακριβώς όπου είμαστε πρόκειται να μιλήσουμε για τους δείκτες μαζί με το αρχείο δείκτες. Έτσι, αυτή η λειτουργία φαίνεται το είδος των τρομακτικό. Είναι πήρε πολλές παραμέτρους. Υπάρχει μια παρτίδα σε εξέλιξη εδώ. Υπάρχουν πολλές διαφορετικές χρώματα και κείμενα. Αλλά πραγματικά, αυτό είναι ακριβώς το γενική έκδοση του fgetc ότι μας επιτρέπει να πάρετε οποιοδήποτε ποσότητα των πληροφοριών. Μπορεί να είναι λίγο αναποτελεσματική αν είμαστε να πάρει χαρακτήρες, ένα κάθε φορά, επανάληψη μέσω του αρχείου ένα χαρακτήρα κάθε φορά. Δεν θα ήταν καλύτερο να πάρετε 100 σε ένα χρόνο ή 500 σε ένα χρόνο; Λοιπόν, fread και τη λειτουργία σύντροφό του fwrite, το οποίο θα μιλήσουμε για σε μια δεύτερη, μας επιτρέπει να κάνουμε ακριβώς αυτό. Μπορούμε να διαβάσουμε ένα αυθαίρετο ποσό πληροφοριών από ένα αρχείο και θα το αποθηκεύσει κάπου προσωρινά. Αντί να είναι σε θέση να απλά χωράει σε ένα μόνο μεταβλητή, μπορεί να χρειαστεί να το αποθηκεύσετε σε μια σειρά. Και ναι, περνάμε σε τέσσερις επιχειρήματα για να fread-- ένα δείκτη στη θέση όπου είμαστε πρόκειται για την αποθήκευση πληροφοριών, πόσο μεγάλο κάθε μονάδα πληροφοριών θα είναι, πόσες μονάδες πληροφοριών θέλουμε να αποκτήσουν, και από ποιο αρχείο που θέλουμε να τους πάρει. Φαίνεται καλύτερα με ένα παράδειγμα εδώ. Ας πούμε ότι δηλώνουμε μια συστοιχία 10 ακεραίων. Έχουμε μόλις δηλωθεί για το στοίβα αυθαίρετα int σύλλ 10. Έτσι, αυτό είναι αρκετά απλή. Τώρα τι κάνουμε και αν είναι η frecall είναι διαβάζουμε μέγεθος του int 10 φορές bytes πληροφοριών. Μέγεθος int ον four-- ότι είναι το μέγεθος του ακεραίου σε c. Έτσι, αυτό που κάνουμε είναι ότι διαβάζετε 40 bytes αξίζει πληροφοριών από το αρχείο που υποδεικνύεται από ptr. Και είμαστε εκείνοι αποθήκευση 40 bytes κάπου όπου έχουμε θέσει κατά μέρος 40 bytes αξίας της μνήμης. Ευτυχώς, έχουμε ήδη κάνει αυτό με δηλώνοντας ARR, ότι υπάρχει σειρά δικαιώματος. Αυτό είναι ικανή συγκράτησης 10 μονάδες τεσσάρων byte. Έτσι, συνολικά, μπορεί να κρατήσει 40 Αξίζει bytes πληροφοριών. Και τώρα διαβάζετε 40 bytes πληροφοριών από το αρχείο, και είμαστε την αποθήκευσή του σε σύλλ. Ανάκληση από το βίντεο για δείκτες που το όνομα ενός πίνακα, όπως ARR, είναι πραγματικά ακριβώς ένα δείκτη για το πρώτο στοιχείο της. Έτσι, όταν περνάμε στην ARR εκεί, είναι, στην πραγματικότητα, περνώντας ένα δείκτη. Ομοίως μπορούμε να κάνουμε this-- εμείς δεν πρέπει απαραίτητα να Πρέπει να αποθηκεύσετε ρυθμιστικό μας στη στοίβα. Θα μπορούσαμε επίσης να κατανείμει δυναμικά Ένα ρυθμιστικό όπως αυτό, χρησιμοποιώντας malloc. Να θυμάστε, όταν κατανέμει δυναμικά μνήμη, είμαστε το αποθηκεύετε για το σωρό, όχι η στοίβα. Αλλά είναι ακόμα ένα ρυθμιστικό. Είναι ακόμη, στην περίπτωση αυτή, είναι που κατέχουν 640 bytes πληροφοριών επειδή ένα διπλό καταλαμβάνει οκτώ bytes. Και ζητάμε για 80 από αυτά. Θέλουμε να έχουμε χώρο να κρατήσει 80 δίκλινα. Έτσι, 80 φορές 8 είναι 640 bytes πληροφοριών. Και ότι η κλήση να είναι fread συλλογή 640 bytes πληροφοριών από το αρχείο που υποδεικνύεται από PTR και την αποθήκευσή του σε arr2 τώρα. Τώρα μπορούμε επίσης να αντιμετωπίσει fread ακριβώς όπως μια κλήση στο fgetc. Στην περίπτωση αυτή, είμαστε απλώς προσπαθεί να να πάρει ένα χαρακτήρα από το αρχείο. Και δεν χρειαζόμαστε ένα σειρά για να κρατήσει ένα χαρακτήρα. Μπορούμε να το αποθηκεύσετε μόνο σε μια μεταβλητή χαρακτήρα. Τα αλιεύματα, όμως, είναι ότι όταν έχουμε απλώς μια μεταβλητή, θα πρέπει να περάσει στο διεύθυνση της μεταβλητής διότι υπενθυμίζουν ότι το Το πρώτο επιχείρημα για να fread είναι ένας δείκτης για την τοποθεσία και τη μνήμη όπου θέλουμε να αποθηκεύσουμε τις πληροφορίες. Και πάλι, το όνομα ενός πίνακας είναι ένας δείκτης. Γι 'αυτό και δεν χρειάζεται να το κάνουμε εμπορικό και συστοιχία. Αλλά ο χαρακτήρας c c εδώ, δεν είναι μια συστοιχία. Είναι απλά μια μεταβλητή. Και γι 'αυτό πρέπει να περάσει ένα εμπορικό και c για να υποδείξει ότι αυτή είναι η διεύθυνση όπου θέλουμε για να αποθηκεύσετε αυτό το ένα byte των πληροφοριών, αυτό χαρακτήρα που είμαστε συλλογή από ptr. Fwrite-- Θα πάω μέσα αυτό λίγο περισσότερο quickly-- είναι λίγο πολύ η ακριβές ισοδύναμο της fread εκτός του ότι είναι για το γράψιμο αντί της ανάγνωσης, απλά όπως το other-- είχαμε ανοιχτή και κοντά, να πάρει ένα χαρακτήρα, γράψετε ένα χαρακτήρα. Τώρα είναι να πάρει αυθαίρετη ποσότητα πληροφοριών, δικαίωμα αυθαίρετα το ποσό των πληροφοριών. Έτσι ακριβώς όπως πριν, μπορούμε έχουν μια σειρά από 10 ακέραιους αριθμούς όπου έχουμε ήδη πληροφορίες που είναι αποθηκευμένες, ίσως. Ήταν ίσως μερικές γραμμές κώδικα ότι πρέπει να πάτε μεταξύ αυτών των δύο όπου γεμίζω με arr κάτι σημαντικό. Γεμίζω με 10 διαφορετικές ακέραιοι. Και αντ 'αυτού, τι είμαι κάνει γράφει από σύλλ και τη συλλογή των πληροφοριών από την σύλλ. Και παίρνω τις πληροφορίες και τη θέση στο αρχείο. Έτσι, αντί να είναι από το αρχείο στο buffer, είμαστε τώρα σε εξέλιξη από το ρυθμιστικό στο αρχείο. Έτσι είναι ακριβώς το αντίθετο. Έτσι και πάλι, όπως και πριν, μπορούμε έχουν επίσης ένα σωρό κομμάτι της μνήμης ότι έχουμε δυναμικά κατανέμονται και να διαβάσετε από αυτό και γράφουν ότι στο αρχείο. Και έχουμε επίσης μια μοναδική μεταβλητή μπορεί να χωρέσει ένα byte των πληροφοριών, όπως ένα χαρακτήρα. Αλλά και πάλι, θα πρέπει να περάσει σε η διεύθυνση της μεταβλητής όταν θέλουμε να διαβάσουμε από αυτό. Έτσι μπορούμε να γράψουμε τις πληροφορίες βρίσκουμε σε αυτή τη διεύθυνση με το δείκτη του αρχείου, PTR. Υπάρχουν πολλά άλλα μεγάλο αρχείο I / O λειτουργίες ότι κάνουν διάφορα πράγματα εκτός αυτά που έχουμε μιλήσει σήμερα. Ένα ζευγάρι από αυτά μπορείτε να βρείτε χρήσιμες είναι fgets και fputs, το οποίο είναι το ισοδύναμο της fgetc και fputc αλλά και για την ανάγνωση μια χορδή από ένα αρχείο. Αντί για ένα μεμονωμένο χαρακτήρα, θα διαβάσετε μια ολόκληρη εγχόρδων. fprintf, το οποίο επιτρέπει ουσιαστικά μπορείτε να χρησιμοποιήσετε printf για να γράψει στο αρχείο. Έτσι ακριβώς όπως μπορείτε να κάνετε τα αντικατάσταση μεταβλητών χρησιμοποιώντας το ποσοστό κράτησης θέσης i και τοις εκατό d, και ούτω καθεξής, με printf μπορείτε να πάρετε τον ίδιο τρόπο η printf κορδόνι και κάτι εκτύπωσης όπως ότι σε ένα αρχείο. fseek-- εάν έχετε ένα DVD player είναι η αναλογία που συνήθως χρησιμοποιούν here-- Είναι κάπως σαν τη χρήση σας rewind και fast forward κουμπιά για να μετακινηθείτε γύρω από την ταινία. Ομοίως, μπορείτε να μετακινήσετε γύρω από το αρχείο. Ένα από τα πράγματα μέσα ότι η δομή του αρχείου ότι γ δημιουργεί για εσάς είναι ένας δείκτης από όπου και αν βρίσκεστε στο αρχείο. Είστε σε πολύ αρχή, στο byte μηδέν; Είσαι στο byte 100, byte 1.000, και ούτω καθεξής; Μπορείτε να χρησιμοποιήσετε fseek να μετακινήσετε αυθαίρετα αυτός ο δείκτης, μπροστά ή πίσω. Και ftell, και πάλι παρόμοιο με ένα DVD player, Είναι σαν ένα μικρό ρολόι που λέει Σας πόσα λεπτά και δευτερόλεπτα είναι σε μια συγκεκριμένη ταινία. Ομοίως, ftell σας λέει πώς ο αριθμός των bytes που είναι στο αρχείο. feof είναι μια διαφορετική έκδοση της ανίχνευσης αν έχετε φθάσει στο τέλος του αρχείου. Και ferror είναι μια συνάρτηση που μπορείτε να χρησιμοποιήσετε να εξακριβώσουμε αν κάτι έχει πάει στραβά εργασίας με ένα αρχείο. Και πάλι, αυτό είναι ακριβώς το ξύσιμο της επιφάνειας. Υπάρχουν ακόμα πολλά περισσότερα file I / O λειτουργίες στο πρότυπο io.h. Αλλά αυτό θα σας πάρει κατά πάσα πιθανότητα Ξεκίνησα να δουλεύω με δείκτες αρχείο. Είμαι ο Νταγκ Lloyd. Αυτό είναι CS50.