Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Saturday, September 11, 2010

Các hàm thành viên của các lớp làm việc với File

Con trỏ get và put

Mọi đối tượng luồng xuất nhập đều có ít nhất một con trỏ luồng:

- Luồng ifstream có con trỏ istream mà ta gọi là con trỏ get để trỏ vào phần tử có thể đọc dữ liệu.

- Luồng ofstream có con trỏ ostream mà ta gọi là con trỏ put để trỏ vào phần tử có thể ghi dữ liệu.

- Luồng fstream có cả hai con trỏ get và put để đọc và ghi dữ liệu.

Những con trỏ luồng nội tại này trỏ vào vị trí đọc và ghi với luồng có thể sử dụng các hàm thành viên sau đây:

Hàm thành viên tellg() và tellp()
Hai hàm thành viên này không có tham số và trả về giá trị của một kiểu dữ liệu dạng pos_type. Kiểu dữ liệu này bản chất là một số nguyên integer. Nó mô tả vị trí hiện tại của của con trỏ luồng get và con trỏ luồng put.

Hàm thành viên seekg() và seekp()
Những hàm thành viên này cho phép chúng ta thay đổi vị trí hiện tại của con trỏ luồng get và put. Cả hai hàm này được chồng chất với hai prototype khác nhau. Prototype thứ nhất:

seekg(vị_trí);

seekp(vị_trí);

Việc sử dụng các prototype này giúp làm thay đổi vị trí tuyệt đối (vị trí này tính từ đầu file). Kiểu dữ liệu của tham số này trùng với kiểu dữ liệu của hai hàm tellg() và tellp() ở trên.

Prototype thứ hai:

seekg(vị_trí, kiểu);

seekp(vị_trí, kiểu);

Việc sử dụng prototype này sẽ làm thay đổi vị trí hiện tại của con trỏ get và con trỏ put được xác định theo vị trí tương đối theo tham số vị_trí và tham số kiểu. vị_trí của một thành viên thuộc kiểu dữ liệu off_type, nó cũng là một kiểu số nguyên, nó tương ứng với vị trí của con trỏ get/set được đặt vào. Tham số kiểu là một kiểu dữ liệu seekdir, nó là một kiểu enum để xác định vị_trí của con trỏ get/put kể từ kiểu, nó có thể nhận một trong các giá trị sau đây.

ios::beg
vị_trí được đếm từ vị trí bắt đầu của luồng
ios::cur
vị_trí được đếm từ vị trí hiện tại của luồng
ios::end
vị_trí được đếm từ vị trí cuối của luồng

Điều này có nghĩa là hàm chồng chất hai tham số này cũng tương tự hàm một tham số, nhưng vị trí bắt đầu tính trong hàm một tham số luôn là từ vị trí đầu tiên, còn hàm hai tham số có ba vị trí có thể bắt đầu đếm – bắt đầu (ios::beg), hiện tại (ios::cur) hay cuối file (ios::end).

Bạn có thể quan sát vị dụ sau đây


Ví dụ
Kết quả
1.   #include
2.   #include
3.   using namespace std;
4.   int main(){
5.   long begin, end;
6.   ifstream myfile(“example.txt”);
7.   begin = myfile.tellg();
8.   myfile.seekg(0, ios::end);
9.   end = myfile.tellg();
10.             myfile.close();
11.             cout<<”Size=”<<(end-begin)<<” bytes”;
12.             return 0;
13.             }
Size=10 bytes

Giải thích: trong chương trình trên chúng ta đang mở một file example.txt. Chúng ta đếm kích thước của file này. Khi mở file, con trỏ get sẽ đặt vào vị trí đầu file. Khi đó, dòng lệnh 7 sẽ gán giá trị khởi đầu cho biến begin (trong trường hợp này sẽ là 0). Dòng lệnh 8 sẽ đặt con trỏ get vào vị trí cuối cùng của file (vị trí 0 kể từ cuối file tính lên). Dòng lệnh 9 sẽ gán vị trí hiện tại – vị trí cuối file cho biến end. Điều đó có nghĩa là giá trị end-begin chính là kích thước của file. Bạn cũng lưu ý rằng, trong file văn bản, một kí tự tương ứng với 1 byte – đó cũng chính là quy định trong C++ (một kiểu char chiếm 1 byte). Hay nói chính xác, chương trình này đếm số kí tự trong file văn bản.

No comments:

Post a Comment