Đọc và ghi file để phục vụ lưu trữ dữ liệu cho bài toán giúp quá trình test chương trình diễn ra nhanh chóng và sử dụng lại được những lần sau
Bạn có thể tham khảo thêm Cách đọc ghi file trong pascal
1. Đọc và ghi file trong Visual Studio C++
Mình không rõ trong Visual Studio C++ có sự khác biệt như thế nào nhưng mình không thể đọc và ghi file trong Visual Studio C++ bằng hàm Freopen như trong Codeblock. Chính vì thế tùy thuộc vào nhu cầu mà mình sẽ có cách đọc file khác nhau.
Để đọc và ghi file chúng ta sẽ có 3 thao tác chính là:
- Mở file
- Xử lí trên file (bao gồm: lấy dữ liệu và ghi dữ liệu)
- Đóng file
Sử dụng thư viện fstream #include <fstream>
a. Đọc file trong Visual Studio C++
Mở file để đọc
Trong bài viết này mình sẽ hướng dẫn bạn sử dụng ifstream để đọc và ghi file
Đầu tiên Mở file đối với loại mở để đọc file bạn sử dụng cú pháp:
ifstream <tên biến>(<tên file cần mở>);
Ví dụ:
ifstream in(“input.txt”);
Điều đó có nghĩa là mình sẽ mở file input.txt và đặt nó cái tên là in
Đọc dữ liệu từ file
Nếu bạn đã biết cách nhập dữ liệu thông thường bằng cin, thì ở đây đoc từ file khá đơn giản, bạn chỉ cần thay cin thành in thì chương trình sẽ lấy dữ liệu từ file.
Ví dụ: Đọc 2 số a, b từ file và in tổng của chúng ra màn hình.
int a, b; in >> a >> b; cout << "Tong "<<a+b<<endl;
Đóng file sau khi đọc xong
Để hoàn tất quá trình đọc file bạn phải đóng file để tránh các lỗi xử lí file có thể xảy ra, lúc này bạn cần dùng lệnh
<tên biến>.close():
ví dụ: in.close()
b. Ghi file trong Visual Studio C++
Ghi file trong Visual Studio C++ cũng khá giống cách đọc file, bạn chỉ việc dùng giống cout là xong.
Mở file ghi dữ liệu
Các bạn sử dụng ofstream để đọc và ghi file
Đầu tiên Mở file đối với loại mở để ghi file bạn sử dụng cú pháp:
ofstream <tên biến>(<tên file cần mở>);
Ví dụ:
ofstream out(“output.txt”);
Điều đó có nghĩa là mình sẽ mở file output.txt và đặt nó cái tên là out
Ghi dữ liệu file
Nếu bạn đã biết cách in dữ liệu ra màn hình thông thường bằng cout, thì ở đây ghi dữ liêu vào file khá đơn giản, bạn chỉ cần thay cout thành out thì chương trình sẽ ghi dữ liệu ra file.
Ví dụ: In ra màn hình dòng đầu số 1234 dòng thứ 2 “KienThuc24h”
out << 1234; out << endl; // xuống dòng out << "KienThuc24h";
Đóng file sau khi ghi xong
Để hoàn tất quá trình ghi file bạn phải đóng file để tránh các lỗi xử lí file có thể xảy ra, lúc này bạn cần dùng lệnh
<tên biến>.close():
ví dụ: out.close()
2. Đọc và ghi file trong Codeblock và trình chấm online
Đối với cách đọc và ghi file khi sử dụng các trình biên dịch khác như GNU GCC mà Codeblock hay các trình chấm online khác sử dụng khá đơn giản.
Bạn chỉ việc sử dụng freopen là xong.
a. Đọc file trong Codeblock và trình chấm online
Sử dụng câu lệnh sau đây ở đầu chương trình để đọc file bằng freopen
freopen("input.txt","r",stdin);
Lúc này chương trình sẽ đọc dữ liệu từ file input.txt khi bạn dùng lệnh cin
b. Ghi file trong Codeblock và trình chấm online
Sử dụng câu lệnh sau đây ở đầu chương trình để ghi file bằng freopen
freopen("output.txt","w",stdout);
Lúc này chương trình sẽ ghi dữ liệu vào file output.txt khi bạn dùng lệnh cout
c. Chương trình minh họa
Đọc thông tin từ file “input.txt”, dòng đầu tiên là số phần tử, dòng tiếp theo chứa danh sách phần tử.
#include <fstream> #include <iostream> using namespace std; int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); int n, x; cin >> n; while (n--) { cin >> x; cout << x << endl; } }
sau khi ghi file ra txt rồi, có cách nào mình ghi tiếp cái file đó nữa không????
Để tiếp tục ghi file bằng freopen bạn thay “w” thành “a” nha
ví dụ
Còn đối với ofstream bạn sử dụng khai báo sau:
ofstream out("test.txt", std::ofstream::app);
ví dụ