Πώς να διαβάσετε και να γράψετε σε ένα αρχείο σε C ++

How Read Write File C



Σε αυτό το άρθρο, θα σας δείξουμε πώς να διαβάζετε και να γράφετε σε ένα αρχείο στη γλώσσα προγραμματισμού C ++ χρησιμοποιώντας πολλά παραδείγματα. Για να κατανοήσουμε λειτουργίες αρχείων C ++ όπως η ανάγνωση και η εγγραφή, πρέπει πρώτα να κατανοήσουμε την έννοια της ροής στο C ++.

Τι είναι το Stream;

Μια ροή είναι απλώς μια ροή δεδομένων ή χαρακτήρων. Υπάρχουν δύο τύποι ροών: ροές εισόδου και ροές εξόδου. Μια ροή εισόδου χρησιμοποιείται για την ανάγνωση των δεδομένων από μια εξωτερική συσκευή εισόδου, όπως ένα πληκτρολόγιο, ενώ μια ροή εξόδου χρησιμοποιείται για την εγγραφή δεδομένων στην εξωτερική συσκευή εξόδου, όπως μια οθόνη. Ένα αρχείο μπορεί να θεωρηθεί ως πηγή εισόδου και εξόδου.









Στο C ++, χρησιμοποιούμε μια ροή για αποστολή ή λήψη δεδομένων προς ή από εξωτερική πηγή.



Μπορούμε να χρησιμοποιήσουμε ενσωματωμένες κλάσεις για να έχουμε πρόσβαση σε μια ροή εισόδου/εξόδου, δηλ. Ios.





Ακολουθεί η ιεραρχία κλάσης ροής της γλώσσας προγραμματισμού C ++:



Τα αντικείμενα cin και cout χρησιμοποιούνται για την ανάγνωση των δεδομένων από το πληκτρολόγιο και την εμφάνιση της εξόδου στην οθόνη, αντίστοιχα. Επιπλέον, το ifstream, το οποίο σημαίνει ροή αρχείου εισόδου, χρησιμοποιείται για την ανάγνωση μιας ροής δεδομένων από ένα αρχείο και το ofstream, που σημαίνει ροή αρχείου εξόδου, χρησιμοποιείται για τη σύνταξη μιας ροής δεδομένων σε ένα αρχείο.

Το αρχείο iostram.h περιέχει όλες τις απαιτούμενες τυπικές κατηγορίες ροής εισόδου/εξόδου στη γλώσσα προγραμματισμού C ++.

Παραδείγματα

Τώρα που κατανοείτε τα βασικά των ροών, θα συζητήσουμε τα ακόλουθα παραδείγματα για να σας βοηθήσουμε να κατανοήσετε καλύτερα τις λειτουργίες αρχείων σε C ++:

  • Παράδειγμα 1: Ανοίξτε και κλείστε ένα αρχείο
  • Παράδειγμα 2: Γράψτε σε ένα αρχείο
  • Παράδειγμα 3: Ανάγνωση από αρχείο
  • Παράδειγμα 4: Ανάγνωση και εγγραφή σε αρχείο
  • Παράδειγμα 5: Ανάγνωση και εγγραφή σε δυαδικό αρχείο

Παράδειγμα 1: Ανοίξτε και κλείστε ένα αρχείο

Σε αυτό το παράδειγμα προγράμματος, θα δείξουμε πώς να ανοίξετε/δημιουργήσετε ένα αρχείο και πώς να κλείσετε το αρχείο σε C ++. Όπως μπορείτε να δείτε στο παρακάτω πρόγραμμα, έχουμε συμπεριλάβει τη βιβλιοθήκη που απαιτείται για τις λειτουργίες αρχείων.

Για να ανοίξουμε και να κλείσουμε ένα αρχείο, χρειαζόμαστε ένα αντικείμενο της ροής. Στη συνέχεια, για να διαβάσουμε ή να γράψουμε σε ένα αρχείο, πρέπει να ανοίξουμε το αρχείο. Έχουμε συμπεριλάβει το αρχείο κεφαλίδας fstream στη γραμμή αριθμού-1, ώστε να έχουμε πρόσβαση στην τάξη της ροής.

Έχουμε δηλώσει ένα myFile_Handler ως αντικείμενο της ροής μέσα στην κύρια συνάρτηση. Στη συνέχεια, μπορούμε να χρησιμοποιήσουμε τη λειτουργία ανοιχτού () για να δημιουργήσουμε ένα κενό αρχείο και τη λειτουργία κλεισίματος () για να κλείσουμε το αρχείο.

#περιλαμβάνω

χρησιμοποιώντας ονομαστικου χωρουώρες?

intκύριος()
{
ofstream myFile_Handler?

// Άνοιγμα αρχείου
myFile_Handler.Άνοιξε('File_1.txt')?

// Κλείσιμο αρχείου
myFile_Handler.Κλείσε()?
ΕΠΙΣΤΡΟΦΗ 0?
}

Τώρα, θα μεταγλωττίσουμε το πρόγραμμα και θα εξετάσουμε την έξοδο. Όπως μπορείτε να δείτε στο παράθυρο εξόδου παρακάτω, το αρχείο File_1.txt δημιουργήθηκε μετά την εκτέλεση του προγράμματος. Το μέγεθος του αρχείου είναι μηδενικό αφού δεν έχουμε γράψει περιεχόμενο στο αρχείο.

Παράδειγμα 2: Γράψτε σε ένα αρχείο

Στο προηγούμενο παράδειγμα προγράμματος, σας δείξαμε πώς να ανοίξετε ένα αρχείο και πώς να κλείσετε το αρχείο. Τώρα, θα σας δείξουμε πώς να γράψετε κάτι σε ένα αρχείο.

Μπορούμε να γράψουμε σε ένα αρχείο χρησιμοποιώντας τον τελεστή εισαγωγής ροής, δηλ.<<. In this program, we have used the file handler and insertion operator to write two lines in the file. The insertion operator (<<) indicates that we are inserting the string into the output file stream object.

#περιλαμβάνω

χρησιμοποιώντας ονομαστικου χωρουώρες?

intκύριος()
{
ofstream myFile_Handler?
// Άνοιγμα αρχείου
myFile_Handler.Άνοιξε('File_1.txt')?

// Γράψτε στο αρχείο
myFile_Handler<< «Αυτό είναι ένα δείγμα δοκιμαστικού αρχείου. ' <<endl?
myFile_Handler<< «Αυτή είναι η δεύτερη γραμμή του αρχείου. ' <<endl?

// Κλείσιμο αρχείου
myFile_Handler.Κλείσε()?
ΕΠΙΣΤΡΟΦΗ 0?
}

Τώρα, θα μεταγλωττίσουμε το παραπάνω πρόγραμμα και θα το εκτελέσουμε. Όπως μπορείτε να δείτε παρακάτω, έχουμε γράψει με επιτυχία στο αρχείο File_1.txt.

Παράδειγμα 3: Ανάγνωση από αρχείο

Στα προηγούμενα παραδείγματα, σας δείξαμε πώς να γράφετε περιεχόμενο σε ένα αρχείο. Τώρα, ας διαβάσουμε το περιεχόμενο από το αρχείο που δημιουργήσαμε στο Παράδειγμα 2 και να εμφανίσουμε το περιεχόμενο στην τυπική συσκευή εξόδου, δηλαδή στην οθόνη.

Χρησιμοποιούμε τη συνάρτηση getline () για να διαβάσουμε ολόκληρη τη γραμμή από το αρχείο και, στη συνέχεια, cout για να εκτυπώσουμε τη γραμμή στην οθόνη.

#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω

χρησιμοποιώντας ονομαστικου χωρουώρες?

intκύριος()
{
ifstream myFile_Handler?
string myLine?

// Άνοιγμα αρχείου στη λειτουργία ανάγνωσης
myFile_Handler.Άνοιξε('File_1.txt')?

αν(myFile_Handler.είναι ανοιχτό())
{
// Συνεχίστε να διαβάζετε το αρχείο
ενώ(getline(myFile_Handler, myLine))
{
// εκτυπώστε τη γραμμή στην τυπική έξοδο
κόστος <<η γραμμή μου<<endl?
}
// Κλείσιμο αρχείου
myFile_Handler.Κλείσε()?
}
αλλού
{
κόστος << 'Αδυναμία ανοίγματος του αρχείου!'?
}
ΕΠΙΣΤΡΟΦΗ 0?
}

Τώρα, θα εκτυπώσουμε το περιεχόμενο του File_1.txt χρησιμοποιώντας την ακόλουθη εντολή: cat File_1.txt. Μόλις μεταγλωττίσουμε και εκτελέσουμε το πρόγραμμα, είναι σαφές ότι η έξοδος ταιριάζει με το περιεχόμενο του αρχείου. Ως εκ τούτου, διαβάσαμε με επιτυχία το αρχείο και εκτυπώσαμε το περιεχόμενο του αρχείου στην οθόνη.

Παράδειγμα 4: Ανάγνωση και εγγραφή σε αρχείο

Μέχρι τώρα, σας δείξαμε πώς να ανοίγετε, να διαβάζετε, να γράφετε και να κλείνετε ένα αρχείο. Στο C ++, μπορούμε επίσης να διαβάζουμε και να γράφουμε ταυτόχρονα σε ένα αρχείο. Για να διαβάζουμε και να γράφουμε σε ένα αρχείο, πρέπει να πάρουμε ένα αντικείμενο fstream και να ανοίξουμε το αρχείο σε λειτουργία ios :: in και ios :: out.

Σε αυτό το παράδειγμα, γράφουμε πρώτα κάποιο περιεχόμενο στο αρχείο. Στη συνέχεια, διαβάζουμε τα δεδομένα από το αρχείο και τα εκτυπώνουμε στην οθόνη.

#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω

χρησιμοποιώντας ονομαστικου χωρουώρες?

intκύριος()
{
fstream myFile_Handler?
string myLine?

// Άνοιγμα αρχείου
myFile_Handler.Άνοιξε('File_1.txt', ios::σε |ios::έξω)?

// Ελέγξτε αν το αρχείο έχει ανοίξει
αν(!myFile_Handler)
{
κόστος << 'Το αρχείο δεν άνοιξε!'?
έξοδος(1)?
}

// Γράψτε στο αρχείο
myFile_Handler<< '1. Αυτό είναι ένα άλλο δείγμα δοκιμαστικού αρχείου. ' <<endl?
myFile_Handler<< '2. Αυτή είναι η δεύτερη γραμμή του αρχείου. ' <<endl?

myFile_Handler.αναζητώ(ios::ικετεύω)?

// Διαβάστε το αρχείο
αν(myFile_Handler.είναι ανοιχτό())
{
// Συνεχίστε να διαβάζετε το αρχείο
ενώ(getline(myFile_Handler, myLine))
{
// εκτυπώστε τη γραμμή στην τυπική έξοδο
κόστος <<η γραμμή μου<<endl?
}

// Κλείσιμο αρχείου
myFile_Handler.Κλείσε()?
}
αλλού
{
κόστος << 'Αδυναμία ανοίγματος του αρχείου!'?
}
myFile_Handler.Κλείσε()?
ΕΠΙΣΤΡΟΦΗ 0?
}

Τώρα, θα μεταγλωττίσουμε και θα εκτελέσουμε το πρόγραμμα.

Παράδειγμα 5: Ανάγνωση και εγγραφή σε δυαδικό αρχείο

Σε αυτό το παράδειγμα, θα δηλώσουμε μια κλάση και στη συνέχεια θα γράψουμε το αντικείμενο σε ένα δυαδικό αρχείο. Για να απλοποιήσουμε αυτό το παράδειγμα, έχουμε δηλώσει την κλάση Employee με μια δημόσια μεταβλητή emp_id. Στη συνέχεια, θα διαβάσουμε το δυαδικό αρχείο και θα εκτυπώσουμε την έξοδο στην οθόνη.

#περιλαμβάνω
#περιλαμβάνω

χρησιμοποιώντας ονομαστικου χωρουώρες?

τάξηΥπάλληλος
{
δημόσιο:
intemp_id?
}?

intκύριος()
{
ofstream binOutFile_Handler?
ifstream binInFile_Handler?

Υπάλληλος empObj_W, empObj_R?

// Άνοιγμα αρχείου
binOutFile_Handler.Άνοιξε('Emplo.dat', ios::έξω |ios::δυάδικος)?

// Ελέγξτε αν το αρχείο έχει ανοίξει
αν(!binOutFile_Handler)
{
κόστος << 'Το αρχείο δεν άνοιξε!'?
έξοδος(1)?
}

// Αρχικοποίηση empObj_W
empObj_W.emp_id = 1512?

// Γράψτε στο αρχείο
binOutFile_Handler.γράφω((απανθρακώνω *) &empObj_W,μέγεθος του(Υπάλληλος))?
binOutFile_Handler.Κλείσε()?

αν(!binOutFile_Handler.Καλός())
{
κόστος << 'Παρουσιάστηκε σφάλμα κατά τη σύνταξη του δυαδικού αρχείου!' <<endl?
έξοδος(2)?
}

// Τώρα, ας διαβάσουμε το αρχείο staff.dat
binInFile_Handler.Άνοιξε('Emplo.dat', ios::σε |ios::δυάδικος)?
// Ελέγξτε αν το αρχείο έχει ανοίξει
αν(!binInFile_Handler)
{
κόστος << 'Το αρχείο δεν άνοιξε!'?
έξοδος(3)?
}

// Διαβάστε το περιεχόμενο του δυαδικού αρχείου
binInFile_Handler.ανάγνωση((απανθρακώνω *) &empObj_R,μέγεθος του(Υπάλληλος))?
binInFile_Handler.Κλείσε()?

αν(!binInFile_Handler.Καλός())
{
κόστος << 'Παρουσιάστηκε σφάλμα κατά την ανάγνωση του δυαδικού αρχείου!' <<endl?
έξοδος(4)?
}

// Εκτυπώστε την έξοδο του empObj_R
κόστος << «Στοιχεία υπαλλήλου:» <<endl?
κόστος << 'Ταυτότητα Υπαλλήλου : ' <<empObj_R.emp_id <<endl?

ΕΠΙΣΤΡΟΦΗ 0?
}

συμπέρασμα

Τα αρχεία χρησιμοποιούνται κυρίως για την αποθήκευση των δεδομένων και παίζουν σημαντικό ρόλο στον πραγματικό προγραμματισμό. Σε αυτό το άρθρο, σας δείξαμε πώς να χρησιμοποιείτε διάφορες λειτουργίες αρχείων με τη γλώσσα προγραμματισμού C ++ δουλεύοντας διάφορα παραδείγματα. Επιπλέον, σας δείξαμε πώς να διαβάζετε και να γράφετε δεδομένα τόσο σε αρχεία κειμένου όσο και σε δυαδικά αρχεία.