cpp:file_io
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:file_io [2019/05/20 11:43] – gthanos | cpp:file_io [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Είσοδος και έξοδος αρχείων ====== | ====== Είσοδος και έξοδος αρχείων ====== | ||
- | Η C++ εισάγει την έννοια του | + | Η //standard// βιβλιοθήκη της C++ παρέχει τις παρακάτω κλάσεις για είσοδο και έξοδο από αρχεία. |
- | * να εισαχθούν στο //stream// με συγκεκριμένη σειρά και να γραφούν σε ένα αρχείο ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν. | + | |
- | * να διαβαστούν από ένα αρχείο ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι | + | |
- | + | ||
- | Βασικά χαρακτηριστικά των //streams// είναι τα εξής: | + | |
- | - Ένα //stream// μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα //streams// δίνουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν για οποιοδήποτε μέσο επικοινωνίας/ | + | |
- | - Τα //streams// δουλεύουν αυτόματα με τους βασικούς τύπους δεδομένων. Για τους αναφορικούς τύπους μπορείτε να υπερφορτώσετε τους τελεστές %%>> | + | |
- | + | ||
- | Η C++ παρέχει τις παρακάτω κλάσεις για είσοδο και έξοδο από αρχεία. | + | |
- **[[http:// | - **[[http:// | ||
- **[[http:// | - **[[http:// | ||
Line 29: | Line 21: | ||
</ | </ | ||
- | ===== Άνοιγμα αρχείου για | + | ===== Άνοιγμα αρχείου για |
Το άνοιγμα των αρχείων γίνεται μέσω της μεθόδου //open// η οποία προδιαγράφεται παρακάτω: | Το άνοιγμα των αρχείων γίνεται μέσω της μεθόδου //open// η οποία προδιαγράφεται παρακάτω: | ||
Line 39: | Line 31: | ||
^ Τιμή | ^ Τιμή | ||
- | | **ios:: | + | | **ios:: |
- | | **ios:: | + | | **ios:: |
- | | **ios:: | + | | **ios:: |
- | | **ios::ate** | Θέτει τη θέση γραψίματος στο τέλος του αρχείου. Εάν | + | | **ios::app** | Η θέση |
- | | **ios::app** | Η θέση γραψίματος τίθεται | + | | **ios::ate** | Θέτει τη θέση |
| **ios:: | | **ios:: | ||
Line 82: | Line 74: | ||
===== Αρχεία κειμένου ===== | ===== Αρχεία κειμένου ===== | ||
- | //Streams// κειμένου είναι εκείνα τα streams που κατά το άνοιγμα του αρχείου δεν έχουν ορισμένο το //flag **ios:: | + | //Streams// κειμένου είναι εκείνα τα streams που κατά το άνοιγμα του αρχείου δεν έχουν ορισμένο το //flag **ios:: |
Ο τρόπος με τον οποίο γράφετε ή διαβάζετε είναι ο τρόπος που το κάνετε για τη βασική είσοδο και έξοδο. | Ο τρόπος με τον οποίο γράφετε ή διαβάζετε είναι ο τρόπος που το κάνετε για τη βασική είσοδο και έξοδο. | ||
Line 155: | Line 147: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ===== Δυαδικά αρχεία ===== | ||
+ | |||
+ | Για δυαδικά αρχεία η ανάγνωση και η εγγραφή με χρήση των τελεστών %%<< | ||
+ | |||
+ | | <code cpp> | ||
+ | | <code cpp> | ||
+ | |||
+ | Δείτε το παρακάτω παράδειγμα ανάγνωσης και εγγραφής από δυαδικό αρχείο. Το πρόγραμμα αντιγράφει το περιεχόμενο ενός υφιστάμενου αρχείου σε ένα άλλο σε τμήματα των SIZE bytes. | ||
+ | |||
+ | <code cpp binary_copy.cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | #define SIZE 512 | ||
+ | |||
+ | int main (int argc, char *argv[]) { | ||
+ | string filename; | ||
+ | cout << "Enter input filename: "; | ||
+ | cin >> filename; | ||
+ | ifstream infile(filename.c_str()); | ||
+ | if (!infile.is_open()) { | ||
+ | cout << " | ||
+ | return -1; | ||
+ | } | ||
+ | | ||
+ | cout << "Enter output filename: "; | ||
+ | cin >> filename; | ||
+ | ofstream outfile(filename.c_str(), | ||
+ | if (!outfile.is_open()) { | ||
+ | cout << " | ||
+ | return -1; | ||
+ | } | ||
+ | | ||
+ | char buf[SIZE]; | ||
+ | while(!infile.eof()) { | ||
+ | infile.read(buf, | ||
+ | outfile.write(buf, | ||
+ | } | ||
+ | infile.close(); | ||
+ | outfile.close(); | ||
+ | } | ||
+ | </ | ||
cpp/file_io.1558352629.txt.gz · Last modified: 2019/05/20 10:43 (external edit)