This is an old revision of the document!
Τα streams εισόδου διατηρούν τη θέση ανάγνωσης και τα streams εξόδου τη θέση εγγραφής. Streams που υποστηρίζουν είσοδο και έξοδο διατηρούν ξεχωριστές θέσεις για ανάγνωση και για εγγραφή.
Η κλάση istream διαθέτει τη συνάρτηση tellg για την ανάγνωση της θέσης ανάγνωσης μέσα στο stream. Η συνάρτηση επιστρέφει ένα αντικείμενο του τύπου streampos και ορίζεται ως εξής:
streampos tellg();
Η κλάση ostream διαθέτει τη συνάρτηση tellp για την ανάγνωση της θέσης εγγραφής μέσα στο stream. Η συνάρτηση επιστρέφει ένα αντικείμενο του τύπου streampos και ορίζεται ως εξής:
streampos tellp();
Η κλάση istream διαθέτει τη συνάρτηση seekg για την αλλαγή της θέσης ανάγνωσης μέσα στο stream. Η συνάρτηση επιστρέφει μία αναφορά στο υφιστάμενο stream και ορίζεται ως εξής:
istream& seekg (streampos pos); istream& seekg (streamoff off, ios_base::seekdir way);
Η κλάση ostream διαθέτει τη συνάρτηση seekp για την αλλαγή της θέσης εγγραφής μέσα στο stream. Η συνάρτηση επιστρέφει μία αναφορά στο υφιστάμενο stream και ορίζεται ως εξής:
ostream& seekp (streampos pos); ostream& seekp (streamoff off, ios_base::seekdir way);
Οι παράμετροι που λαμβάνουν οι συναρτήσεις seekg και seekp είναι οι εξής:
| ios::beg | αρχή του stream |
| ios::cur | τρέχουσα θέση του stream |
| ios::end | τέλος του stream |
Ακολουθούν δύο παραδείγματα αλλαγής της θέσης ανάγωσης και εγγραφής πάνω στο file stream.
#include <iostream> #include <fstream> using namespace std; int main (int argc, char *argv[]) { string filename; cout << "Enter output filename: "; cin >> filename; ofstream outfile(filename.c_str(), ios::trunc); if (!outfile.is_open()) { cout << "[Write] Unable to open " << filename; return -1; } outfile << "I hate pointers in C"; outfile.flush(); ifstream infile(filename.c_str()); if (!infile.is_open()) { cout << "[Read] Unable to open " << filename; return -1; } string line; getline( infile, line ); cout << line << endl; outfile.seekp(2); outfile << "love"; outfile.seekp(1, ios::cur); outfile << "references"; outfile.seekp(0,ios::end); outfile << "++" << endl; infile.seekg(0, ios::beg); getline( infile, line ); cout << line << endl; }
#include <iostream> #include <fstream> using namespace std; int main () { streampos begin,end; string filename; cout << "Enter filename: "; cin >> filename; ifstream file(filename.c_str()); if (!file.is_open()) { cout << "Unable to open " << filename; return -1; } begin = file.tellg(); file.seekg (0, ios::end); end = file.tellg(); file.close(); cout << "file size is: " << (end-begin) << " bytes.\n"; }