This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
cpp:file_io [2019/05/20 11:43] gthanos |
cpp:file_io [2019/05/21 06:53] gthanos [Άνοιγμα αρχείου για διάβασμα και γράψιμο] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Είσοδος και έξοδος αρχείων ====== | ====== Είσοδος και έξοδος αρχείων ====== | ||
| - | |||
| - | Η C++ εισάγει την έννοια του //stream//, ως μία σειρά από χαρακτήρες οι οποίοι μπορούν: | ||
| - | * να εισαχθούν στο //stream// με συγκεκριμένη σειρά και να γραφούν σε ένα αρχείο ή σε μία σειριακή συσκευή με τη σειρά που εισήχθησαν. | ||
| - | * να διαβαστούν από ένα αρχείο ή από μία σειριακή συσκευή με τη σειρά που είναι αποθηκευμένοι ή με τη σειρά που εισήχθησαν στη συσκευή. | ||
| - | |||
| - | Βασικά χαρακτηριστικά των //streams// είναι τα εξής: | ||
| - | - Ένα //stream// μεταφράζεται πάντα σε μία ακολουθία χαρακτήρων. Τα //streams// δίνουν ένα ενιαίο τρόπο γραφής και ανάγνωσης προς τα αντικείμενα που τα χρησιμοποιούν για οποιοδήποτε μέσο επικοινωνίας/ | ||
| - | - Τα //streams// δουλεύουν αυτόματα με τους βασικούς τύπους δεδομένων. Για τους αναφορικούς τύπους μπορείτε να υπερφορτώσετε τους τελεστές %%>> | ||
| Η C++ παρέχει τις παρακάτω κλάσεις για είσοδο και έξοδο από αρχεία. | Η C++ παρέχει τις παρακάτω κλάσεις για είσοδο και έξοδο από αρχεία. | ||
| Line 41: | Line 33: | ||
| | **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(); | ||
| + | } | ||
| + | </ | ||