I. Khái niệm cơ bản
File I/O (Input/Output) nghĩa là đọc và ghi dữ liệu từ/tới tệp tin trên máy tính.C++ hỗ trợ điều này thông qua thư viện
<fstream> gồm 3 lớp:| Lớp | Chức năng |
|---|---|
ofstream | Ghi dữ liệu ra file |
ifstream | Đọc dữ liệu từ file |
fstream | Vừa đọc vừa ghi |
II. Tạo và ghi file
Mã:
#include <iostream>
#include <fstream> // để dùng ofstream
using namespace std;
int main() {
ofstream fileOut("data.txt"); // tạo hoặc mở file để ghi
if (fileOut.is_open()) {
fileOut << "Xin chao ban!\n";
fileOut << "Day la dong thu hai.\n";
fileOut << "C++ rat hay!";
fileOut.close(); // đóng file lại
cout << "Ghi file thanh cong!" << endl;
} else {
cout << "Khong the mo file!" << endl;
}
return 0;
}
Tạo ra file
data.txt với nội dung:
Mã:
Xin chao ban!
Day la dong thu hai.
C++ rat hay!
III. Đọc dữ liệu từ file
Mã:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fileIn("data.txt"); // mở file để đọc
string line;
if (fileIn.is_open()) {
while (getline(fileIn, line)) {
cout << line << endl; // in từng dòng
}
fileIn.close();
} else {
cout << "Khong the mo file!" << endl;
}
return 0;
}
Mã:
Xin chao ban!
Day la dong thu hai.
C++ rat hay!
IV. Vừa đọc vừa ghi (fstream)
Nếu bạn cần đọc và ghi trong cùng chương trình, dùng fstream:
Mã:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream file("test.txt", ios::in | ios::out | ios::app);
// ios::app => ghi nối tiếp
// ios::in => đọc
// ios::out => ghi
if (file.is_open()) {
file << "Dong moi duoc them!\n";
file.seekg(0); // quay lại đầu file để đọc
string line;
while (getline(file, line)) {
cout << line << endl;
}
file.close();
} else {
cout << "Khong mo duoc file!" << endl;
}
return 0;
}
V. Chế độ mở file
| Chế độ | Ý nghĩa |
|---|---|
ios::in | Mở để đọc |
ios::out | Mở để ghi |
ios::app | Ghi nối tiếp (không ghi đè) |
ios::trunc | Ghi đè (xóa hết dữ liệu cũ) |
ios::binary | Mở file dạng nhị phân |
VI. Ví dụ: Ghi và đọc điểm học sinh
Mã:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// Ghi file
ofstream out("diem.txt");
int n;
cout << "Nhap so hoc sinh: ";
cin >> n;
for (int i = 0; i < n; i++) {
string ten;
int diem;
cout << "Ten: "; cin >> ten;
cout << "Diem: "; cin >> diem;
out << ten << " " << diem << endl;
}
out.close();
// Đọc file
ifstream in("diem.txt");
cout << "\nDanh sach trong file:\n";
string ten;
int diem;
while (in >> ten >> diem) {
cout << ten << " - " << diem << endl;
}
in.close();
return 0;
}
diem.txt:
Mã:
An 9
Binh 7
Chi 10
VII. Hình minh họa:
Mã:
Chương trình → [ofstream] → file.txt → [ifstream] → Màn hình
VIII. Bài tập luyện tập
Bài 1:
Tạo file ghichu.txt, ghi vào 3 dòng nội dung bất kỳ rồi đọc lại.
Bài 2:
Ghi danh sách 5 học sinh gồm tên + điểm, sau đó đọc lại và tính điểm trung bình.
Bài 3 (nâng cao):
Tạo chương trình quản lý file đơn giản:- Chọn 1: ghi thêm dữ liệu
- Chọn 2: đọc dữ liệu
- Chọn 3: thoát
Tóm tắt Tiết 8
| Chức năng | Cú pháp | Ghi chú |
|---|---|---|
| Ghi file | ofstream file("a.txt"); | Dùng << |
| Đọc file | ifstream file("a.txt"); | Dùng getline() hoặc >> |
| Đóng file | file.close(); | Luôn nên có |
| Chế độ | ios::in, ios::out, ios::app | Kết hợp được |
| Thư viện | <fstream> | Bắt buộc dùng |
