User Tools

Site Tools


cpp:stream_random_io

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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//. Η συνάρτηση επιστρέφει ένα αντικείμενο του τύπου //streampos// και ορίζεται ως εξής: 
-<code cpp>streampos tellg();</code> 
- 
-Η κλάση //ostream// διαθέτει τη συνάρτηση //tellp// για την ανάγνωση της θέσης εγγραφής μέσα στο //stream//. Η συνάρτηση επιστρέφει ένα αντικείμενο του τύπου //streampos// και ορίζεται ως εξής: 
-<code cpp>streampos tellp();</code> 
- 
-==== Μεταβολή της θέσης ανάγνωσης ή εγγραφής ==== 
- 
-Η κλάση //istream// διαθέτει τη συνάρτηση //seekg// για την αλλαγή της θέσης ανάγνωσης μέσα στο //stream//. Η συνάρτηση επιστρέφει μία αναφορά στο υφιστάμενο //stream// και ορίζεται ως εξής: 
-<code cpp>istream& seekg (streampos pos); 
-istream& seekg (streamoff off, ios_base::seekdir way);</code> 
- 
-Η κλάση //ostream// διαθέτει τη συνάρτηση //seekp// για την αλλαγή της θέσης εγγραφής μέσα στο //stream//. Η συνάρτηση επιστρέφει μία αναφορά στο υφιστάμενο //stream// και ορίζεται ως εξής: 
-<code cpp>ostream& seekp (streampos pos); 
-ostream& seekp (streamoff off, ios_base::seekdir way);</code> 
- 
-Οι παράμετροι που λαμβάνουν οι συναρτήσεις //seekg// και //seekp// είναι οι εξής: 
-  * **pos:** Απόλυτη θέση μέσα στο //stream// ξεκινώντας από την αρχή. 
-  * **off:** Σχετική θέση μέσα στο //stream//. Συνδέεται με την τιμή της μεταβλητής **way**. 
-  * **way:** Μπορεί να πάρει μία από τις παρακάτω τιμές 
- 
-|  **ios::beg**  | αρχή του //stream// | 
-|  **ios::cur**  | τρέχουσα θέση του //stream// | 
-|  **ios::end**  | τέλος του //stream// | 
- 
-Ακολουθούν δύο παραδείγματα αλλαγής της θέσης ανάγωσης και εγγραφής πάνω στο //file stream// 
- 
-<code cpp fileseek.cpp> 
-#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;   
-}</code> 
- 
-<code cpp filesize.cpp> 
-#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(); 
-  myfile.close(); 
-  cout << "file size is: " << (end-begin) << " bytes.\n"; 
-} 
-</code> 
- 
  
cpp/stream_random_io.txt · Last modified: 2019/05/22 07:57 (external edit)