This shows you the differences between two versions of the page.
|
cpp:stream_random_io [2019/05/21 04:16] gthanos created |
cpp:stream_random_io [2019/05/22 07:57] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Αλλαγή της θέσης ανάγνωσης ή εγγραφής στο stream ====== | ||
| - | |||
| - | Τα //streams// εισόδου διατηρούν τη θέση ανάγνωσης και τα //streams// εξόδου τη θέση εγγραφής. //Streams// που υποστηρίζουν είσοδο και έξοδο διατηρούν ξεχωριστές θέσεις για ανάγνωση και για εγγραφή. | ||
| - | |||
| - | ==== Ανάγνωση της θέσης ανάγνωσης ή εγγραφής ==== | ||
| - | |||
| - | Η κλάση //istream// διαθέτει τη συνάρτηση //tellg// για την ανάγνωση της θέσης ανάγνωσης μέσα στο //stream//. Η συνάρτηση επιστρέφει ένα αντικείμενο του τύπου // | ||
| - | <code cpp> | ||
| - | |||
| - | Η κλάση //ostream// διαθέτει τη συνάρτηση //tellp// για την ανάγνωση της θέσης εγγραφής μέσα στο //stream//. Η συνάρτηση επιστρέφει ένα αντικείμενο του τύπου // | ||
| - | <code cpp> | ||
| - | |||
| - | ==== Μεταβολή της θέσης ανάγνωσης ή εγγραφής ==== | ||
| - | |||
| - | Η κλάση //istream// διαθέτει τη συνάρτηση //seekg// για την αλλαγή της θέσης ανάγνωσης μέσα στο //stream//. Η συνάρτηση επιστρέφει μία αναφορά στο υφιστάμενο //stream// και ορίζεται ως εξής: | ||
| - | <code cpp> | ||
| - | istream& | ||
| - | |||
| - | Η κλάση //ostream// διαθέτει τη συνάρτηση //seekp// για την αλλαγή της θέσης εγγραφής μέσα στο //stream//. Η συνάρτηση επιστρέφει μία αναφορά στο υφιστάμενο //stream// και ορίζεται ως εξής: | ||
| - | <code cpp> | ||
| - | ostream& | ||
| - | |||
| - | Οι παράμετροι που λαμβάνουν οι συναρτήσεις //seekg// και //seekp// είναι οι εξής: | ||
| - | * **pos:** Απόλυτη θέση μέσα στο //stream// ξεκινώντας από την αρχή. | ||
| - | * **off:** Σχετική θέση μέσα στο //stream//. Συνδέεται με την τιμή της μεταβλητής **way**. | ||
| - | * **way:** Μπορεί να πάρει μία από τις παρακάτω τιμές | ||
| - | |||
| - | | **ios:: | ||
| - | | **ios:: | ||
| - | | **ios:: | ||
| - | |||
| - | Ακολουθούν δύο παραδείγματα αλλαγής της θέσης ανάγωσης και εγγραφής πάνω στο //file stream// | ||
| - | |||
| - | <code cpp fileseek.cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | using namespace std; | ||
| - | |||
| - | int main (int argc, char *argv[]) { | ||
| - | string filename; | ||
| - | cout << "Enter output filename: "; | ||
| - | cin >> filename; | ||
| - | ofstream outfile(filename.c_str(), | ||
| - | if (!outfile.is_open()) { | ||
| - | cout << " | ||
| - | return -1; | ||
| - | } | ||
| - | outfile << "I hate pointers | ||
| - | outfile.flush(); | ||
| - | | ||
| - | ifstream infile(filename.c_str()); | ||
| - | if (!infile.is_open()) { | ||
| - | cout << " | ||
| - | return -1; | ||
| - | } | ||
| - | string line; | ||
| - | getline( infile, line ); | ||
| - | cout << line << endl; | ||
| - | | ||
| - | outfile.seekp(2); | ||
| - | outfile << " | ||
| - | outfile.seekp(1, | ||
| - | outfile << " | ||
| - | outfile.seekp(0, | ||
| - | outfile << " | ||
| - | | ||
| - | infile.seekg(0, | ||
| - | getline( infile, line ); | ||
| - | cout << line << endl; | ||
| - | }</ | ||
| - | |||
| - | <code cpp filesize.cpp> | ||
| - | #include < | ||
| - | #include < | ||
| - | 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 << " | ||
| - | return -1; | ||
| - | } | ||
| - | begin = file.tellg(); | ||
| - | file.seekg (0, ios::end); | ||
| - | end = file.tellg(); | ||
| - | myfile.close(); | ||
| - | cout << "file size is: " << (end-begin) << " bytes.\n"; | ||
| - | } | ||
| - | </ | ||
| - | |||