9/7/15

Tổng quan về đối tượng fstream trong C++

Đối tượng fstream cung cấp nhiều phương thức để đọc ghi file nhưng tiện lợi và an toàn hơn con trỏ FILE nhiều. Để sử dụng được fstream bạn cần khai báo #include<fstream>. Ngoài ra, C++ còn cung cấp thêm 2 đối tượng khác là ifstreamofstream chỉ chuyên biệt cho việc đọc file và ghi file trong khi fstream có thể thực hiện được cả 2 việc này. Chính vì vậy, bài viết này sẽ hướng dẫn các bạn một cách vắn tắt các thao tác cơ bản với fstream trong C++.

1. Tạo đối tượng fstream để đọc/ghi file. Việc đọc/ghi file sẽ được thực hiện thông qua đối tượng này.
Khai báo: fstream <tênbiến>;

2. Dùng phương thức open() để mở một file.
Cú pháp:
<tênbiến>.open(<đường dẫn>,<chế độ mở>);
Hoặc có thể vừa khai báo biến vừa mở file luôn.
fstream <tênbiến>(<đường dẫn>,<chế độ mở>);

Đường dẫn có thể là tương đối (tính từ file exe khi được build ra) hoặc tuyệt đối (tính từ ổ đĩa gốc).
Chế độ mở có nhiều loại:

Chế độ mởÝ nghĩa
ios::inMở file ở chế độ đọc
ios::outMở file ở chế độ ghi
ios::appMở file chế độ ghi thêm vào
ios::ateMở file để đọc/ghi từ cuối file
ios::truncTạo đè file mới hoàn toàn
ios::nocreateMở một file phải tồn tại
ios::noreplaceTạo file mới chưa tồn tại
ios::binaryMở file chế độ nhị phân
ios::textMở file chế độ văn bản

Có thể kết hợp nhiều chế độ bằng toán tử |.
Ví dụ:
fstream file("data/text.txt", ios::in | ios::out);


3. Dùng toán tử >> để đọc số và chuỗi không chứa dấu cách, dùng phương thức getline() để đọc chuỗi có dấu cách.
Cú pháp: <tênbiến> >> <tênbiếnlưudữliệu>;
Ví dụ:
int x;
fstream file("data/text.txt", ios::in);
if (file.is_open())
   file >> x;

Phương thức getline() dùng cho chuỗi kiểu char*.
Cú pháp:
<tênbiến>.getline(<biếnlưudữliệu>,<kíchthước>,<kýtựkếtthúc>);
Ký tự kết thúc mặc định là \n, nếu thích thì bạn có thể dùng ký tự khác làm ký tự kết thúc.

4. Dùng toán tử << để ghi file văn bản.
Cú pháp: <tênbiến> << <tênbiếndữliệu>;
Dữ liệu sẽ được ghi vào file thông qua biến fstream.

5. Dùng phương thức get() để đọc 1 ký tự, dùng phương thức put() để ghi một ký tự.

6. Dùng phương thức read()write() để đọc/ghi tệp nhị phân.
Cú pháp:
<tênbiến>.read(char * address, int size);
Cú pháp này có thể hiểu là đọc từ file vào địa chỉ address một kích thước size byte.
<tênbiến>.write(char* address, int size);
Ghi dữ liệu từ địa chỉ address vào file với kích thước size byte.

7. Một số phương thức kiểm tra quan trọng:
is_open() : Kiểm tra xem file đã mở thành công chưa. Nên kiểm tra điều này trước khi thực hiện bất kỳ thao tác nào với file.
eof(): Kiểm tra xem con trỏ file đã đọc đến cuối file chưa.
close(): Đóng file. Bắt buộc phải có thao tác này sau khi làm việc với file.

2 nhận xét: