file input output operations c
Μια μελέτη σχετικά με τις λειτουργίες εξόδου εισόδου αρχείων και τις λειτουργίες δείκτη αρχείων στο C ++.
Στον προγραμματισμό σε πραγματικό χρόνο, ασχολούμαστε με μεγάλα κομμάτια δεδομένων που δεν μπορούν να προσαρμοστούν από τυπικές συσκευές εισόδου-εξόδου. Ως εκ τούτου, πρέπει να χρησιμοποιήσουμε τη δευτερεύουσα αποθήκευση για την αποθήκευση δεδομένων. Χρησιμοποιώντας δευτερεύοντα χώρο αποθήκευσης συνήθως αποθηκεύουμε δεδομένα με τη μορφή αρχείων.
Μπορούμε να διαβάσουμε δεδομένα από αρχεία ή να γράψουμε δεδομένα σε αρχεία χρησιμοποιώντας μια ακολουθία δεδομένων που ονομάζεται ροές είτε σε κείμενο είτε σε δυαδική μορφή. Υπάρχουν διάφορες είσοδοι / έξοδο και άλλες λειτουργίες που σχετίζονται με αρχεία στο C ++. Αυτό το σεμινάριο εξηγεί αυτές τις λειτουργίες που σχετίζονται με αρχεία που χρησιμοποιούν διάφορες τάξεις.
=> Επισκεφθείτε εδώ για την αποκλειστική σειρά εκπαιδευτικών εκπαιδευτικών C ++.
Τι θα μάθετε:
Κατηγορίες εισόδου / εξόδου αρχείων σε C ++
Έχουμε δει μια τάξη iostream στο C ++ που καθορίζει την τυπική λειτουργία εισόδου και εξόδου, συμπεριλαμβανομένων των cin και cout. Αυτή η κατηγορία περιορίζεται στις τυπικές συσκευές εισόδου και εξόδου, όπως πληκτρολόγιο και οθόνη αντίστοιχα.
Όταν πρόκειται για λειτουργίες αρχείων, το C ++ έχει ένα διαφορετικό σύνολο τάξεων που μπορούν να χρησιμοποιηθούν.
Αυτές οι τάξεις περιγράφονται ως εξής:
- Εκ των προτέρων: Κατηγορία χειρισμού αρχείων που δηλώνει τη ροή αρχείων εξόδου και χρησιμοποιείται για τη συγγραφή δεδομένων σε αρχεία.
- Ifstream: Κατηγορία χειρισμού αρχείων που δηλώνει τη ροή του αρχείου εισαγωγής και χρησιμοποιείται για την ανάγνωση δεδομένων από το αρχείο.
- Fstream: Κατηγορία χειρισμού αρχείων που έχει τη δυνατότητα να χειρίζεται τόσο το ifstream όσο και το ofstream. Μπορεί να χρησιμοποιηθεί για ανάγνωση και εγγραφή σε αρχείο.
Υποστηρίζονται οι ακόλουθες λειτουργίες, στο C ++ File Handling:
- Ανοίξτε ένα αρχείο
- Κλείσιμο αρχείου
- Διαβάστε από ένα αρχείο
- Γράψτε σε ένα αρχείο
Ας δούμε καθεμία από αυτές τις λειτουργίες λεπτομερώς !!
Ανοίξτε ένα αρχείο
Η συσχέτιση ενός αντικειμένου μιας από τις τάξεις ροής σε ένα αρχείο είτε για ανάγνωση είτε για γραφή ή και τα δύο ονομάζεται άνοιγμα ενός αρχείου. Ένα ανοιχτό αρχείο αντιπροσωπεύεται σε κώδικα χρησιμοποιώντας αυτό το αντικείμενο ροής. Επομένως, οποιαδήποτε λειτουργία ανάγνωσης / γραφής που εκτελείται σε αυτό το αντικείμενο ροής θα εφαρμοστεί και στο φυσικό αρχείο.
Η γενική σύνταξη για το άνοιγμα ενός αρχείου με τη ροή είναι:
void open(const char* filename, ios::open mode mode)
Εδώ,
filename => Η συμβολοσειρά που περιέχει τη διαδρομή και το όνομα του αρχείου που θα ανοίξει.
mode => Προαιρετική παράμετρος που δείχνει τη λειτουργία στην οποία θα ανοίξει το αρχείο.
Το C ++ υποστηρίζει διάφορους τρόπους με τους οποίους μπορεί να ανοίξει το αρχείο. Μπορούμε επίσης να καθορίσουμε έναν συνδυασμό αυτών των λειτουργιών χρησιμοποιώντας τον τελεστή OR.
πληκτρολογήστε char στη συμβολοσειρά c ++
Λειτουργία αρχείου | Περιγραφή |
---|---|
ios :: σε | Ανοίγει το αρχείο σε λειτουργία εισαγωγής για ανάγνωση. |
ios :: έξω | Ανοίγει το αρχείο σε κατάσταση εξόδου για εγγραφή δεδομένων σε αρχείο. |
ios :: έφαγε | Ορίστε την αρχική θέση στο τέλος του αρχείου. Εάν δεν έχει οριστεί το τέλος του αρχείου, η αρχική θέση ορίζεται στην αρχή του αρχείου. |
ios :: trunc | Εάν το αρχείο ανοίξει για εγγραφή και έχει ήδη περιεχόμενο, τα περιεχόμενα περικοπούνται. |
ios :: εφαρμογή | Ανοίγει το αρχείο σε λειτουργία προσάρτησης έτσι ώστε όλα τα περιεχόμενα να προσαρτώνται στο τέλος του αρχείου. |
ios :: δυαδικό | Ανοίγει το αρχείο σε δυαδική λειτουργία. |
Για παράδειγμα,Αν θέλουμε να ανοίξουμε ένα αρχείο 'myfile.dat' για προσθήκη δεδομένων σε δυαδική λειτουργία, τότε μπορούμε να γράψουμε τον ακόλουθο κώδικα.
ofstream myfile;
myfile.open(“myfile.dat”, ios::out|ios::app|ios::binary);
Όπως προαναφέρθηκε, η παράμετρος λειτουργίας είναι προαιρετική. Όταν ανοίγουμε ένα αρχείο χωρίς να καθορίσουμε τη δεύτερη παράμετρο, μια συνάρτηση ανοιχτού μέλους ofstream, ifstream ή fstream έχει μια προεπιλεγμένη λειτουργία για να ανοίξει το αρχείο.
Αυτά δίνονται ως εξής:
Τάξη | Προεπιλεγμένη λειτουργία |
---|---|
Ifstream | ios :: σε |
της ροής | ios :: έξω |
Fstream | ios :: σε | ios :: έξω |
Έτσι, εάν δεν καθορίσουμε τη δεύτερη παράμετρο στην ανοιχτή λειτουργία, ανάλογα με την τάξη ροής που χρησιμοποιείται, το αρχείο ανοίγει με την προεπιλεγμένη λειτουργία.
Κλείσιμο αρχείου
Μπορούμε να χρησιμοποιήσουμε τη λειτουργία κλεισίματος για να κλείσουμε ένα αρχείο και να αποδεσμεύσουμε τους πόρους που κατέχει το αρχείο όταν τελειώσουμε με τις λειτουργίες εισόδου και εξόδου σε ένα αρχείο.
Η λειτουργία κλεισίματος ενός αρχείου είναι:
void close()
Έτσι, όταν τελειώσουμε με τις λειτουργίες στο παραπάνω αρχείο myfile, μπορούμε να κλείσουμε το αρχείο ως εξής:
myfile.close();
Μόλις το αρχείο κλείσει χρησιμοποιώντας τη λειτουργία κλεισίματος, το συσχετισμένο αντικείμενο αρχείου μπορεί να επαναχρησιμοποιηθεί για να ανοίξει άλλο αρχείο.
Διαβάζοντας από ένα αρχείο
Μπορούμε να διαβάσουμε τις πληροφορίες από μια γραμμή κατά γραμμή χρησιμοποιώντας τον τελεστή εξαγωγής ροής (>>). Αυτό είναι παρόμοιο με την ανάγνωση εισόδου από την τυπική είσοδο χρησιμοποιώντας cin. Η μόνη διαφορά είναι στην περίπτωση των αρχείων, χρησιμοποιούμε ifstream ή fstream αντικείμενο αντί για cin.
Δείγμα κώδικα για ανάγνωση από ένα αρχείο δίνεται παρακάτω:
ifstream myfile; myfile.open(“samp_file.txt”); cout<<”Reading from a file”<>data; cout<Στον παραπάνω κώδικα, ανοίγουμε ένα αρχείο και χρησιμοποιώντας τον τελεστή εξαγωγής ροής (>>), διαβάζουμε τα περιεχόμενα του αρχείου. Μόλις ολοκληρωθεί η ανάγνωση, μπορούμε να κλείσουμε το αρχείο.
Γράφοντας σε ένα αρχείο
Μπορούμε επίσης να γράψουμε δεδομένα σε ένα αρχείο χρησιμοποιώντας τις λειτουργίες του αρχείου. Ο τελεστής που χρησιμοποιούμε για την εγγραφή δεδομένων σε ένα αρχείο είναι ένας τελεστής εισαγωγής ροής (<<). Once again this is the same operator that we use to print data to a standard output device using cout. Difference between the two is that for file related writing we use ofstream or fstream object.
Ας εξετάσουμε τον ακόλουθο Παράδειγμα κώδικα:
char data(100); ofstream myfile; myfile.open(“samp_file.txt”); cout<<”Enter the string to be written to file”<Εδώ, διαβάζουμε μια γραμμή από την είσοδο και την γράφουμε σε ένα αρχείο που άνοιξε με το αντικείμενο ροής.
Στο παρακάτω παράδειγμα κώδικα, παρέχουμε μια επίδειξη όλων των λειτουργιών διαχείρισης αρχείων.
#include #include using namespace std; int main () { char data(100); // opening a file in write mode. ofstream myfile; myfile.open('E:\message.txt'); cout << 'Writing to the file' << endl; cout << 'Enter your name: '; cin.getline(data, 100); myfile << data << endl; cout <> data; cin.ignore(); myfile << data << endl; // close the opened file. myfile.close(); // opening a file in read mode. ifstream infile; infile.open('E:\message.txt'); cout << 'Reading from a file' <> data; cout << data <> data; cout << data << endl; infile.close(); return 0; }
Παραγωγή:
Γράφοντας στο αρχείο
Πληκτρολογήστε το όνομά σας: Ved
Εισαγάγετε την ηλικία σας: 7
Ανάγνωση από ένα αρχείο
Με
7
Στο παραπάνω πρόγραμμα πρώτα, ανοίγουμε ένα αρχείο στη λειτουργία εγγραφής. Στη συνέχεια, διαβάζουμε δεδομένα, δηλαδή όνομα και ηλικία και τα γράφουμε σε ένα αρχείο. Στη συνέχεια κλείνουμε αυτό το αρχείο. Στη συνέχεια, ανοίγουμε το ίδιο αρχείο στη λειτουργία ανάγνωσης και διαβάζουμε τη γραμμή δεδομένων ανά γραμμή από το αρχείο και το εξάγουμε στην οθόνη.
Έτσι, αυτό το πρόγραμμα καλύπτει όλες τις λειτουργίες I / O του αρχείου.
διαφορά μεταξύ δοκιμής μονάδας και δοκιμής ολοκλήρωσης
Σκωρίες κατάστασης αρχείου
Υπάρχουν ορισμένες λειτουργίες μέλους που χρησιμοποιούνται για τον έλεγχο της κατάστασης του αρχείου. Όλες αυτές οι συναρτήσεις επιστρέφουν μια τιμή Boolean.
Έχουμε συγκεντρώσει αυτές τις συναρτήσεις ως εξής:
τεχνικές δοκιμής μαύρου κουτιού με παραδείγματα
Λειτουργία Περιγραφή eof () Επιστρέφει true αν φτάσει το τέλος του αρχείου κατά την ανάγνωση του αρχείου. αποτυγχάνω() Επιστρέφει αληθές όταν αποτύχει η λειτουργία ανάγνωσης / εγγραφής ή παρουσιάζεται σφάλμα μορφής κακό() Επιστρέφει αληθές εάν αποτύχει η ανάγνωση ή η εγγραφή σε αρχείο. Καλός() Επιστρέφει ψευδές στις ίδιες περιπτώσεις στις οποίες η κλήση οποιασδήποτε από τις παραπάνω λειτουργίες θα επιστρέψει αληθινή.
Λήψη / τοποθέτηση και άλλες ειδικές λειτουργίες
Οι ροές αρχείων I / O που έχουμε δει μέχρι στιγμής έχουν εσωτερική θέση λήψης και τοποθέτησης παρόμοιες με τις άλλες ροές I / O όπως το iostream.
Η κλάση ifstream έχει μια εσωτερική θέση λήψης που περιέχει τη θέση του στοιχείου / χαρακτήρα που θα διαβαστεί στο αρχείο στην επόμενη λειτουργία εισαγωγής. Η κλάση του ρεύματος έχει μια εσωτερική θέση θέσης που περιέχει τη θέση του στοιχείου / χαρακτήρα που θα γραφτεί στην επόμενη λειτουργία εξόδου.
Παρεμπιπτόντως, το fstream έχει και τις δύο θέσεις και τις θέσεις.
Για να διευκολύνουμε την ανάγνωση και τη γραφή χρησιμοποιώντας αυτές τις θέσεις, έχουμε μερικές λειτουργίες μελών που χρησιμοποιούνται για την παρατήρηση και την τροποποίηση αυτών των θέσεων.
Αυτές οι συναρτήσεις αναφέρονται παρακάτω:
Λειτουργίες Περιγραφή Tellg () Επιστρέφει την τρέχουσα θέση του δείκτη λήψης τελείωμα () Επιστρέφει την τρέχουσα θέση του δείκτη put αναζήτηση (θέση) Οι μετακινήσεις λαμβάνουν ένα δείκτη σε καθορισμένη τοποθεσία που μετρά από την αρχή του αρχείου αναζήτηση (όφσετ, κατεύθυνση) Οι κινήσεις παίρνουν ένα δείκτη για να αντισταθμίσουν την τιμή σε σχέση με το σημείο που δίνεται από την κατεύθυνση παραμέτρου. αναζήτηση (θέση) Οι μετακινήσεις τοποθετούν έναν δείκτη σε καθορισμένη τοποθεσία μετρώντας από την αρχή του αρχείου αναζήτηση (όφσετ, κατεύθυνση) Οι κινήσεις τοποθετούν ένα δείκτη για να αντισταθμίσουν την τιμή σε σχέση με το σημείο που δίνεται από την κατεύθυνση παραμέτρου.
Η παράμετρος κατεύθυνση Δίνεται στα παραπάνω πρωτότυπα συνάρτησης είναι ένα απαριθμημένος τύπος τύπου αναζητάρ και καθορίζει το σημείο από το οποίο μετράται η μετατόπιση.
Μπορεί να έχει τις ακόλουθες τιμές.
ios :: ικετεύω Μετατόπιση από την αρχή της ροής ios :: cur Μετατόπιση από την τρέχουσα θέση ios :: τέλος Μετατόπιση από το τέλος της ροής
Ας δούμε ένα πλήρες παράδειγμα που δείχνει τη χρήση αυτών των λειτουργιών.
#include #include using namespace std; int main() { fstream myfile; myfile.open('E:\myfile.txt',ios::out); if(!myfile) { cout<<'Cannot create File...'; } else { cout<<'New file created'< Παραγωγή:
Δημιουργήθηκε νέο αρχείο
Αρχική θέση δείκτη αρχείου σε: 34
Μετά την αναζήτηση (-1, ios :: cur), Θέση δείκτη αρχείου στο: 33
Μετά την αναζήτηση (5, ios :: beg), Δείκτης αρχείου στη διεύθυνση: 5
Μετά την αναζήτηση (1, ios :: cur), Δείκτης αρχείων στη διεύθυνση: 6

Όπως φαίνεται στο παραπάνω πρόγραμμα, έχουμε δημιουργήσει ένα αρχείο στο οποίο γράφουμε μια γραμμή κειμένου. Στη συνέχεια, χρησιμοποιώντας τις διάφορες λειτουργίες που περιγράφονται παραπάνω, εμφανίζουμε διάφορες θέσεις του δείκτη αρχείων.
συμπέρασμα
Σε αυτό το σεμινάριο, έχουμε δει τις διάφορες λειτουργίες αρχείων να ανοίγουν, να κλείνουν και να διαβάζουν / γράφουν δεδομένα από / σε ένα αρχείο.
Έχουμε επίσης δει τις λειτουργίες για να αλλάξουμε το δείκτη του αρχείου, προκειμένου να έχουμε πρόσβαση σε συγκεκριμένες θέσεις στο αρχείο. Στα επόμενα σεμινάρια μας, θα συζητήσουμε μερικά πιο σημαντικά θέματα που σχετίζονται με το C ++.
=> Διαβάστε το The Easy C ++ Training Series.
Συνιστώμενη ανάγνωση
- Βασικές λειτουργίες εισόδου / εξόδου στο C ++
- Είσοδος-έξοδος και αρχεία στο Python (Python Open, Read and Write to File)
- Βασικές λειτουργίες εισόδου / εξόδου σε Java (Ροές εισόδου / εξόδου)
- Διαχείριση αρχείων στο Unix: Επισκόπηση του συστήματος αρχείων Unix
- Unix Ειδικοί Χαρακτήρες ή Μεταχαρακτήρες για τη Διαχείριση Αρχείων
- Unix Access Access Δικαιώματα: Unix Chmod, Chown και Chgrp
- Αντικείμενα αρχείου VBScript: CopyFile, DeleteFile, OpenTextFile, Ανάγνωση και εγγραφή αρχείου κειμένου
- Ανάπτυξη Java: Δημιουργία και εκτέλεση αρχείου Java JAR