Hỏi về hàm seekg và seekp

Chào anh chị! Em mới học đến phần seekg và seekp thì ko hiểu sự khác nhau giữa 2 hàm này là gì?
Em có code 1 đoạn chương trình (mở để đọc) nhưng vị trí trả về cho thấy hàm seekg (đã thử cả seekp không hoạt động, 1 đoạn code mở để ghi thì hàm seekg có hoạt động.
Mọi giải thích em với ạ! Em cảm ơn

#include <iostream> 
#include <string> 
#include<fstream>
using namespace std; 

int main() 
{
	fstream f;
	f.open("vidu.txt",ios::in);
	string str[20];
	int i=0;
	while(!f.eof()){
		getline(f,str[i],'|');
		i++;
	}
	cout<<"\nVi tri 1: "<<f.tellg();
	string s[10];
	f.seekg(2,ios::beg);
	cout<<"\nVi tri 2: "<<f.tellg();
	getline(f,s[0],'|');
	cout<<endl<<s[0]<<endl;
	f.close();
	
	
	fstream f1;
	f1.open("vidu.txt",ios::out);  // mo de ghi
	for(int j=0;j<i;j++){
		if(j!=i-1)
		{
			if(j%2==0 && j!=0)
				f1<<endl;
			f1<<str[j]<<"|";
		}
		else
			f1<<str[j];
	}
	f1.seekg(4,ios::beg);
	cout<<"\nVi tri 3: "<<f1.tellg();
	f1.close();
	
    return 0;
}

Seekg là di chuyển con trỏ dành cho việc đọc dữ liệu. Con trỏ đọc được seek tới đâu thì quá trình đọc (gọi lệnh read) bắt đầu từ đó. Sau khi đọc thì con trỏ đọc sẽ tự tăng lên bằng số byte đọc được.

Seekp là di chuyển con trỏ cho việc ghi dữ liệu. Con trỏ ghi được seek tới đâu thì quá trình ghi (gọi lệnh write) bắt đầu từ đó. Con trỏ ghi cũng sẽ tăng lên khi ghi dữ liệu.

g và p là (get và post) - chém xằng vậy nếu sai anh em sửa giúp ::))

Tương tự để kiểm tra con trỏ ghi và con trỏ đọc đang ở đâu thì tương ứng có lệnh tellp và tellg.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?