File nhị phân

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 165)

Đối với file nhị phân, việc đọc ghi dữ liệu bằng toán tử tích trách >> và toán tử chèn << cũng như hàm getline là không có hiệu lực, bởi chúng không được định dạng theo kiểu văn bản như đối với file văn bản ở trên (không dùng phím space để tạo khoảng cách, không có kí tự xuống dòng…).

Các luồng của file gồm hai hàm thành viên để đọc và ghi dữ liệu là read và write. Hàm thành viên write là hàm thành viên của lớp ostream thừa kế cho ofstream. Và hàm read là thành viên của lớp istream thừa kế cho ifstream. Các đối tượng của lớp fstream có cả hai hàm thành viên này. Chúng có prototype như sau:

write(khối_bộ_nhớ, kích_thước); read(khối_bộ_nhớ, kích_thước);

Ở đó, khối_bộ_nhớ là một con trỏ kiểu char (char*) và nó biểu diễn địa chỉ của một mảng các byte mà nó đọc hoặc ghi được. Biến kích_thước là một kiểu số nguyên integer, nó chỉ định số các kí tự có thể đọc/ghi lên khối bộ nhớ. Chúng ta hãy quan sát ví dụ sau đây

Ví dụ #include<iostream> #include<fstream> using namespace std; ifstream::pos_type size; char* memblock; int main(){

C

+

+

if(file.is_open()){ size = file.tellg();

memblock = new char[size]; file.seekg(0, ios::beg);

file.read(memblock, size); file.close();

cout<<”Hoan tat !”;

//Làm việc với dữ liệu trong con trỏ memblock delete[] memblock;

}

else cout<<”Khong mo duoc file.”; return 0;

}

Giải thích: trong chương trình, ta mở file example.bin. Chế độ mở file để đọc

(ios::in), theo kiểu file nhị phần (ios::binary), đặt con trỏ get vào cuối file (ios::ate). Sau khi mở file, hàm file.tellg() sẽ cho biết kích thước thực của file. Sau đó hàm file.seekg sẽ đặt vị trí con trỏ get vào đầu file (vị trí 0 kể từ vị trí đầu tiên) và tiến hành đọc theo khối bộ nhờ nhờ vào file.read. Sau khi hoàn tất, phương thức close được triệu gọi để kết thúc việc đọc file. Khi đó, dữ liệu từ file đã đọc vào mảng memblock. Chúng ta có thể bổ sung tác vụ thao tác với dữ liệu nếu muốn. Cuối cùng, con trỏ memblock sẽ bị xóa để giải phóng bộ nhớ.

Một phần của tài liệu Giáo trình lập trình hướng đối tượng c trường cao đẳng công nghiệp huế (Trang 165)