τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌟🌟Αρχική σελίδα συγγραφέα:εφήμερα__
🌟🌟Ανήκει στήλη:Γλώσσα Γ
1. Άνοιγμα και κλείσιμο αρχείων
3. Αρχεία κειμένου και δυαδικά αρχεία
4. Λειτουργίες που ελέγχουν το άνοιγμα και το κλείσιμο του αρχείου
2. Διαδοχική ανάγνωση και εγγραφή αρχείων
3. Τυχαία ανάγνωση και εγγραφή αρχείων
4. Προσδιορισμός τέλους ανάγνωσης αρχείου
Όταν γράφουμε προγράμματα, συχνά αποθηκεύουμε δεδομένα σε μεταβλητές. Εάν το πρόγραμμα τερματιστεί και η μνήμη ανακτηθεί, αυτά τα δεδομένα θα χαθούν. Υπάρχει, λοιπόν, τρόπος για να αποθηκεύσουμε επίμονα αυτά τα δεδομένα, ώστε τα δεδομένα να εξακολουθούν να υπάρχουν όταν ανοίξει ξανά το πρόγραμμα; Η απάντηση είναι ναι. Τι μπορεί να κάνει αυτό είναι:Λειτουργίες αρχείων。
Τα δεδομένα του προγράμματος πρέπει να εξάγονται σε εξωτερικές συσκευές και πρέπει επίσης να εισαχθούν από εξωτερικές συσκευές. Για διαφορετικές συσκευές, οι μέθοδοι εισόδου και εξόδου είναι διαφορετικές. Προκειμένου να διευκολύνουμε τις λειτουργίες μας σε διάφορες συσκευές εισόδου και εξόδου, έχουμε την εξαιρετικά αφηρημένη έννοια της «ροής». Στη γλώσσα C, οι λειτουργίες εισόδου και εξόδου σε αρχεία, οθόνες, πληκτρολόγια κ.λπ. εκτελούνται όλες μέσω "ροών". Γενικά, αν θέλουμε να γράψουμε δεδομένα ή να διαβάσουμε δεδομένα, πρέπει να ανοίξουμε τη ροή.
Όταν ξεκινά ένα πρόγραμμα γλώσσας C, ορίζεται από προεπιλογήτρία ρεύματαΈχει ήδη ανοίξει για εμάς:
stdin-- Τυπική ροή εισόδου, είσοδος από το πληκτρολόγιο στις περισσότερες περιπτώσεις.
stdout--Τυπική ροή εξόδου, έξοδος στην οθόνη στις περισσότερες περιπτώσεις.
stderr-- Τυπική ροή σφαλμάτων, έξοδος στην οθόνη στις περισσότερες περιπτώσεις.
Επειδή αυτές οι τρεις ροές έχουν ανοιχτεί από προεπιλογή, μπορούμε να εκτελέσουμε απευθείας λειτουργίες εισόδου και εξόδου χρησιμοποιώντας λειτουργίες όπως scanf και printf.
Αυτά τα τρία ρεύματα έχουν επίσης τύπους:Δείκτης αρχείου (FILE*) .Όταν εκτελούμε λειτουργίες αρχείων, περνάμεΗ μεταβλητή δείκτη αρχείου μπορεί να βρει έμμεσα το αρχείο που σχετίζεται με αυτήν.。
Ανάλογα με τον τρόπο οργάνωσης των δεδομένων, καλούνται τα αρχεία δεδομένωναρχείο κειμένουήδυαδικό αρχείο . Τα δεδομένα αποθηκεύονται σε δυαδική μορφή στη μνήμη,Εάν εξάγεται σε εξωτερικό αρχείο αποθήκευσης χωρίς μετατροπή, είναιδυαδικό αρχείο。
Εάν απαιτείται να αποθηκευτεί σε κωδικό ASCII σε εξωτερικό χώρο αποθήκευσης, πρέπει να μετατραπεί πριν από την αποθήκευση.Ένα αρχείο που είναι αποθηκευμένο με τη μορφή χαρακτήρων ASCII είναιαρχείο κειμένου。
Πώς αποθηκεύεται ένα κομμάτι δεδομένων σε ένα αρχείο;
Οι χαρακτήρες αποθηκεύονται πάντα σε μορφή ASCII και τα αριθμητικά δεδομένα μπορούν να αποθηκευτούν είτε σε ASCII είτε σε δυαδική μορφή. Για παράδειγμα, εάν υπάρχει ακέραιος αριθμός 10000, εάν εξάγεται στο δίσκο με τη μορφή κώδικα ASCII, θα καταλάβει 5 byte στο δίσκο (ένα byte για κάθε χαρακτήρα), ενώ εάν εξάγεται σε δυαδική μορφή, θα καταλάβει μόνο 4 byte στο δίσκο.
Αφού κατανοήσουμε αυτήν την προαπαιτούμενη γνώση, ας έρθουμε στο θέμα - άνοιγμα αρχείων και κλείσιμο αρχείων. Η γλώσσα C παρέχει δύο λειτουργίες, οι οποίες είναι υπεύθυνες για το άνοιγμα και το κλείσιμο των αρχείων αντίστοιχα.
ανοίξτε ένα αρχείο:ΑΡΧΕΙΟ * fopen ( const char * όνομα αρχείου, const char * mode );
Κλείστε το αρχείο:ενθ fclose ( FILE * stream );
Η συνάρτηση fopen έχει δύο παραμέτρους,Η πρώτη παράμετρος εκφράζεται με τη μορφή συμβολοσειράςόνομα αρχείου, η δεύτερη παράμετρος είναι το αρχείοΑνοιχτή μέθοδος, που αντιπροσωπεύεται από μια συμβολοσειρά .Όταν χρησιμοποιούμε αυτή τη συνάρτηση, πρέπει να δημιουργήσουμε έναμεταβλητή δείκτη αρχείου Για λήψη, όταν το αρχείο αποτυγχάνει να ανοίξει, επιστρέφει έναν μηδενικό δείκτη. Όσον αφορά τις μεθόδους ανοίγματος, ακολουθούν τα εξής:
Ανοιχτή μέθοδος | έννοια | Εάν το καθορισμένο αρχείο δεν υπάρχει |
"r" (μόνο για ανάγνωση) |
Για να εισαγάγετε δεδομένα, ανοίξτε ένα υπάρχον αρχείο κειμένου
| Επιστρέφει έναν μηδενικό δείκτη |
"w" (μόνο εγγραφή) |
Για να εξάγετε δεδομένα, ανοίξτε ένα αρχείο κειμένου
| Δημιουργήστε ένα νέο αρχείο |
"α" (παράρτημα) | Προσθέστε δεδομένα στο τέλος του αρχείου κειμένου | Δημιουργήστε ένα νέο αρχείο |
"rb" (μόνο για ανάγνωση) | Για να εισαγάγετε δεδομένα, ανοίξτε ένα δυαδικό αρχείο | Επιστρέφει έναν μηδενικό δείκτη |
"wb" (μόνο εγγραφή) | Για να εξάγετε δεδομένα, ανοίξτε ένα δυαδικό αρχείο | Δημιουργήστε ένα νέο αρχείο |
"ab" (παράρτημα) | Προσθέστε δεδομένα στο τέλος ενός δυαδικού αρχείου | Δημιουργήστε ένα νέο αρχείο |
"r+" (διαβάζω και γράφω) | Για ανάγνωση και γραφή, ανοίξτε ένα αρχείο κειμένου | Επιστρέφει έναν μηδενικό δείκτη |
"w+" (διαβάζω και γράφω) | Για ανάγνωση και γραφή, δημιουργήστε ένα νέο αρχείο κειμένου | Δημιουργήστε ένα νέο αρχείο |
"a+" (διαβάζω και γράφω) | Ανοίξτε ένα αρχείο και διαβάστε και γράψτε στο τέλος του αρχείου | Δημιουργήστε ένα νέο αρχείο |
"rb+" (διαβάζω και γράφω) | Ανοίξτε ένα δυαδικό αρχείο για ανάγνωση και γραφή | Επιστρέφει έναν μηδενικό δείκτη |
"wb+" (ανάγνωση και εγγραφή)
| Για ανάγνωση και γραφή, δημιουργήστε ένα νέο δυαδικό αρχείο | Δημιουργήστε ένα νέο αρχείο |
"ab+" (διαβάζω και γράφω)
| Ανοίξτε ένα δυαδικό αρχείο και διαβάστε και γράψτε στο τέλος του αρχείου | Δημιουργήστε ένα νέο αρχείο |
Για τη συνάρτηση fclose, η παράμετρός της είναι ο δείκτης αρχείου, ο οποίος χρησιμοποιείται για να κλείσει το αρχείο στο οποίο δείχνει ο δείκτης αρχείου.
Στη συνέχεια, προσπαθούμε να ανοίξουμε και να κλείσουμε ένα αρχείο:
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");
- if (pf == NULL)//文件打开失败则退出程序
- {
- perror("fopen");
- return 0;
- }
- printf("文件打开成功n");
- fclose(pf);
- pf = NULL;//避免出现野指针,及时制空
- return 0;
- }
Μπορεί να φανεί ότι εφόσον η μέθοδος ανοίγματος είναι "w", ένα αρχείο με το όνομα "test.txt" εμφανίζεται στη διαδρομή.
Στη συνέχεια, εισάγουμε διάφορες λειτουργίες γιαΔιαβάστε ή γράψτε δεδομένα σε ένα αρχείο。
Όνομα συνάρτησης | Λειτουργία | Εφαρμόζεται σε |
fgetc | Λειτουργία εισαγωγής χαρακτήρων | Όλες οι ροές εισόδου |
fputc | λειτουργία εξόδου χαρακτήρων | Όλες οι ροές εξόδου |
fgets | Λειτουργία εισαγωγής γραμμής κειμένου | Όλες οι ροές εισόδου |
fputs | Λειτουργία εξόδου γραμμής κειμένου | Όλες οι ροές εξόδου |
fscanf | Μορφοποίηση συνάρτησης εισαγωγής | Όλες οι ροές εισόδου |
fprintf | Μορφοποίηση λειτουργίας εξόδου | Όλες οι ροές εξόδου |
fread | Δυαδική είσοδος | Ροή εισόδου αρχείου |
fwrite | Δυαδική έξοδος | Ροή εξόδου αρχείου |
Στη συνέχεια προσπαθούμε να χρησιμοποιήσουμεfscanfκαιfprintfλειτουργία:
Η πρώτη παράμετρος αυτών των δύο συναρτήσεων είναι ένας δείκτης αρχείου, ο οποίος χρησιμοποιείται για την ανάγνωση και εγγραφή δεδομένων αρχείων. Οι επόμενες παράμετροι είναι ίδιες με τις λειτουργίες scanf και printf.
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fprintf(pf, "123456");//向文件中写入数据
- fclose(pf);
- pf = NULL;
- return 0;
- }
Όπως μπορείτε να δείτε, τα δεδομένα έχουν εγγραφεί στο αρχείο. Στη συνέχεια χρησιμοποιούμε τη συνάρτηση fscanf για να εκτυπώσουμε τα δεδομένα του αρχείου στην οθόνη:
- #include <stdio.h>
-
- int main()
- {
- char str[20] = { 0 };
- FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fscanf(pf, "%s", str);//读取数据到str当中
- printf(str);
- fclose(pf);
- pf = NULL;
- return 0;
- }
Η συνάρτηση της συνάρτησης fseek είναιΜε βάση τη θέση και τη μετατόπιση του δείκτη του αρχείουθέσηδείκτη αρχείου . Το πρωτότυπο του είναι το εξής:
int fseek ( FILE * stream, long int offset, int origin );
Η πρώτη του παράμετρος είναι ο δείκτης αρχείου, η δεύτερη παράμετρος είναι η μετατόπιση σε σχέση με τη θέση ρύθμισης και η τρίτη παράμετρος είναι η θέση ρύθμισης.
Η γλώσσα C ορίζει τρίαΜακροεντολή, μπορείτε να επιλέξετε ένα από αυτά ως τρίτη παράμετρο:
SEEK_SET: αρχική θέση του αρχείου
SEEK_CUR: Η τρέχουσα θέση του δείκτη του αρχείου
SEEK_END: τέλος αρχείου
Αφού εντοπίσουμε τον δείκτη του αρχείου, μπορούμε να διαβάσουμε ή να γράψουμε στην καθορισμένη θέση του αρχείου.
Η συνάρτηση ftell χρησιμοποιείται για την επιστροφήΗ μετατόπιση του δείκτη του αρχείου σε σχέση με την αρχική θέση . Πρωτότυπο λειτουργίας:
long int ftell ( FILE * stream );
Η λειτουργία επαναφοράς χρησιμοποιείται γιαΕπιστρέψτε τη θέση του δείκτη του αρχείου στην αρχή του αρχείου . Το πρωτότυπο λειτουργίας του:
void rewind ( FILE * stream );
1. Γιααρχείο κειμένου, μπορούμε πρώτα να χρησιμοποιήσουμεfgetcΗ συνάρτηση περιηγείται στους χαρακτήρες του αρχείου μέχρι να διαβαστεί το EOF, υποδεικνύονταςΗ ανάγνωση του αρχείου τελειώνει。
2. Γιαδυαδικό αρχείο,ΧρησιμοποιούμεfreadΗ συνάρτηση καθορίζει την τιμή επιστροφής της:Είναι μικρότερο από τον πραγματικό αριθμό που πρέπει να διαβαστεί; .Αν είναι μικρότερο απόΗ ανάγνωση τελειώνει.
Για τις δύο παραπάνω περιπτώσεις ο φάκελοςΣτο τέλος της ανάγνωσης, μπορούμε να συνεχίσουμε να κρίνουμεΛόγος για τον οποίο έληξε η ανάγνωση του αρχείου . Εισαγάγετε δύο λειτουργίες:feofκαιτρόμος。
feofΛειτουργία που χρησιμοποιείται γιαΠροσδιορίστε το τέλος της ανάγνωσης του αρχείουλόγοςΝαί ή όχιΠαρουσιάστηκε το τέλος του αρχείου . Το πρωτότυπο του είναι το εξής:
int feof ( FILE * stream );
Εάν το αρχείο οφείλεται σεΔιαβάστε μέχρι το τέλος του αρχείουΌταν ολοκληρωθεί η ανάγνωση, επιστρέφεται ο ΕΟΦ σε άλλες περιπτώσεις, επιστρέφεται το 0.
τρόμοςΛειτουργία που χρησιμοποιείται γιαΠροσδιορίστε το τέλος της ανάγνωσης του αρχείουλόγοςΝαί ή όχιΠαρουσιάστηκε σφάλμα I/O . Το πρωτότυπο έχει ως εξής:
int ferror ( FILE * stream );
Εάν το αρχείο οφείλεται σεΠαρουσιάστηκε σφάλμα I/OΌταν ολοκληρωθεί η ανάγνωση, επιστρέφεται μια μη μηδενική τιμή σε άλλες περιπτώσεις, επιστρέφεται 0.
Στη συνέχεια προσπαθούμε να γράψουμε ένα κομμάτι κώδικα για να κρίνουμε το τέλος της ανάγνωσης του αρχείου:
- #include <stdio.h>
-
- int main()
- {
- int c = 0;
- FILE* fp = fopen("test.txt", "r");
- if (fp == NULL)
- {
- perror("fopen");
- return 0;
- }
- while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
- {
- putchar(c);
- }
- //判断读取结束的原因
- if (ferror(fp))
- puts("I/O错误n");
- else if (feof(fp))
- puts("文件读取结束n");
- fclose(fp);
- fp = NULL;
- return 0;
- }
Σήμερα μάθαμε για τις λειτουργίες αρχείων, πώς να ανοίγουμε και να κλείνουμε αρχεία, να γράφουμε δεδομένα ή να διαβάζουμε δεδομένα από αρχεία, τις λειτουργίες για την προσαρμογή των δεικτών αρχείων και τον προσδιορισμό του τέλους της ανάγνωσης αρχείων. Αν πιστεύετε ότι αυτό που είπε ο blogger είναι καλό, αφήστε ένα μικρό like και σας ευχαριστούμε για την υποστήριξή σας❤❤❤