C++ Xử lý tệp: Cách mở, ghi, đọc, đóng tệp trong C++

Xử lý tập tin trong là gì C++?

Các tập tin lưu trữ dữ liệu vĩnh viễn trong một thiết bị lưu trữ. Với việc xử lý tệp, đầu ra từ một chương trình có thể được lưu trữ trong một tệp. Nhiều thao tác khác nhau có thể được thực hiện trên dữ liệu khi ở trong tệp.

Luồng là một khái niệm trừu tượng của một thiết bị nơi các hoạt động đầu vào/đầu ra được thực hiện. Bạn có thể biểu diễn luồng như một đích đến hoặc một nguồn ký tự có độ dài không xác định. Điều này sẽ được xác định bởi cách sử dụng của chúng. C++ cung cấp cho bạn một thư viện đi kèm với các phương thức xử lý tệp. Hãy để chúng tôi thảo luận về nó.

Thư viện fstream

Thư viện fstream cung cấp C++ lập trình viên có ba lớp để làm việc với các tập tin. Các lớp này bao gồm:

  • ngoài dòng– Lớp này đại diện cho một luồng đầu ra. Nó được sử dụng để tạo tập tin và ghi thông tin vào tập tin.
  • nếu dòng– Lớp này đại diện cho một luồng đầu vào. Nó được sử dụng để đọc thông tin từ các tập tin dữ liệu.
  • dòng chảy– Lớp này thường đại diện cho một luồng tập tin. Nó đi kèm với khả năng ofstream/ifstream. Điều này có nghĩa là nó có khả năng tạo tệp, ghi vào tệp, đọc từ tệp dữ liệu.

Hình ảnh sau đây giúp bạn hiểu rõ hơn:

thư viện fstream
thư viện fstream

Để sử dụng các lớp trên của thư viện fstream, bạn phải đưa nó vào chương trình của mình dưới dạng tệp tiêu đề. Tất nhiên, bạn sẽ sử dụng chỉ thị tiền xử lý #include. Bạn cũng phải bao gồm tệp tiêu đề iostream.

Cách mở tập tin

Trước khi thực hiện bất kỳ thao tác nào trên một tập tin, trước tiên bạn phải mở nó. Nếu bạn cần ghi vào tệp, hãy mở nó bằng các đối tượng fstream hoặc ofstream. Nếu bạn chỉ cần đọc từ tệp, hãy mở nó bằng đối tượng ifstream.

Ba đối tượng, đó là fstream, ofstream và ifstream, có hàm open() được xác định trong chúng. Hàm này có cú pháp sau:

open (file_name, mode);
  • Tham số file_name biểu thị tên của file cần mở.
  • Tham số mode là tùy chọn. Nó có thể nhận bất kỳ giá trị nào sau đây:
Giá trị Mô tả Chi tiết
ios:: ứng dụng Chế độ Nối thêm. Đầu ra được gửi tới tệp sẽ được thêm vào nó.
ios::đã ăn Nó mở tệp đầu ra sau đó di chuyển điều khiển đọc và ghi đến cuối tệp.
ios :: trong Nó mở tập tin để đọc.
ios::ngoài Nó mở tập tin để viết.
ios::trunc Nếu một tệp tồn tại, các thành phần của tệp phải được cắt bớt trước khi mở tệp.

Có thể sử dụng hai chế độ cùng một lúc. Bạn kết hợp chúng bằng cách sử dụng | (HOẶC) toán tử.

Ví dụ 1:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file.close(); 
	}
	return 0;
}

Đầu ra:

Mở tệp

Đây là ảnh chụp màn hình của mã:

Mở tệp

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong chương trình để sử dụng các chức năng của nó.
  2. Bao gồm tệp tiêu đề fstream trong chương trình để sử dụng các lớp của nó.
  3. Bao gồm không gian tên std trong mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  4. Gọi hàm main(). Logic chương trình phải nằm trong phần thân của nó.
  5. Tạo một đối tượng của lớp fstream và đặt tên là my_file.
  6. Áp dụng hàm open() trên đối tượng trên để tạo một tệp mới. Chế độ out cho phép chúng ta ghi vào tập tin.
  7. Sử dụng câu lệnh if để kiểm tra xem việc tạo tập tin có thất bại hay không.
  8. Thông báo sẽ in trên bảng điều khiển nếu tệp chưa được tạo.
  9. Kết thúc phần thân của câu lệnh if.
  10. Sử dụng câu lệnh khác để nêu những việc cần làm nếu tệp được tạo.
  11. Thông báo sẽ in trên bảng điều khiển nếu tệp đã được tạo.
  12. Áp dụng hàm close() trên đối tượng để đóng tệp.
  13. Kết thúc phần thân của câu lệnh else.
  14. Chương trình phải trả về giá trị nếu nó hoàn thành thành công.
  15. Kết thúc phần thân hàm main().

Cách đóng tập tin

Một lần C++ chương trình chấm dứt, nó tự động

  • xả dòng suối
  • giải phóng bộ nhớ được phân bổ
  • đóng các tập tin đã mở.

Tuy nhiên, là một lập trình viên, bạn nên học cách đóng các tệp đang mở trước khi chương trình kết thúc.

Các đối tượng fstream, ofstream và ifstream có hàm close() để đóng tệp. Hàm này có cú pháp sau:

void close();

Cách ghi vào tập tin

Bạn có thể ghi vào tập tin ngay từ C++ chương trình. Bạn sử dụng toán tử chèn luồng (<<) cho việc này. Văn bản được ghi vào tệp phải được đặt trong dấu ngoặc kép.

Hãy để chúng tôi chứng minh điều này.

Ví dụ 2:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::out);
	if (!my_file) {
		cout << "File not created!";
	}
	else {
		cout << "File created successfully!";
		my_file << "Guru99";
		my_file.close();
	}
	return 0;
}

Đầu ra:

Cách ghi vào tập tin

Đây là ảnh chụp màn hình của mã:

Cách ghi vào tập tin

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong chương trình để sử dụng các chức năng của nó.
  2. Bao gồm tệp tiêu đề fstream trong chương trình để sử dụng các lớp của nó.
  3. Bao gồm không gian tên std trong chương trình để sử dụng các lớp của nó mà không cần gọi nó.
  4. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  5. Tạo một thể hiện của lớp fstream và đặt tên là my_file.
  6. Sử dụng hàm open() để tạo một tệp mới có tên my_file.txt. Tệp sẽ được mở ở chế độ bên ngoài để ghi vào đó.
  7. Sử dụng câu lệnh if để kiểm tra xem file chưa được mở hay chưa.
  8. Văn bản để in trên bảng điều khiển nếu tệp chưa được mở.
  9. Kết thúc phần thân của câu lệnh if.
  10. Sử dụng câu lệnh khác để nêu những việc cần làm nếu tệp được tạo.
  11. Văn bản sẽ in trên bảng điều khiển nếu tệp đã được tạo.
  12. Viết một số văn bản vào tập tin đã tạo.
  13. Sử dụng hàm close() để đóng file.
  14. Kết thúc phần thân của câu lệnh else.
  15. Chương trình phải trả về giá trị sau khi hoàn thành thành công.
  16. Phần cuối của hàm main().

Cách đọc từ tập tin

Bạn có thể đọc thông tin từ các tập tin vào C++ chương trình. Điều này có thể thực hiện được bằng cách sử dụng toán tử trích xuất luồng (>>). Bạn sử dụng toán tử theo cùng cách bạn sử dụng để đọc dữ liệu đầu vào của người dùng từ bàn phím. Tuy nhiên, thay vì sử dụng đối tượng cin, bạn sử dụng đối tượng ifstream/fstream.

Ví dụ 3:

#include <iostream>
#include <fstream>
using namespace std;
int main() {
	fstream my_file;
	my_file.open("my_file.txt", ios::in);
	if (!my_file) {
		cout << "No such file";
	}
	else {
		char ch;

		while (1) {
			my_file >> ch;
			if (my_file.eof())
				break;

			cout << ch;
		}

	}
	my_file.close();
	return 0;
}

Đầu ra:

Đọc từ tập tin

Không có tập tin

Đây là ảnh chụp màn hình của mã:

Đọc từ tập tin

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong chương trình để sử dụng các chức năng của nó.
  2. Bao gồm tệp tiêu đề fstream trong chương trình để sử dụng các lớp của nó.
  3. Bao gồm không gian tên std trong chương trình để sử dụng các lớp của nó mà không cần gọi nó.
  4. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  5. Tạo một thể hiện của lớp fstream và đặt tên là my_file.
  6. Sử dụng hàm open() để tạo một tệp mới có tên my_file.txt. Tệp sẽ được mở ở chế độ để đọc từ nó.
  7. Sử dụng câu lệnh if để kiểm tra xem tập tin có tồn tại hay không.
  8. Văn bản để in trên bảng điều khiển nếu không tìm thấy tệp.
  9. Kết thúc phần thân của câu lệnh if.
  10. Sử dụng câu lệnh khác để nêu những việc cần làm nếu tìm thấy tệp.
  11. Tạo ra một biến char tên là ch.
  12. Tạo ra một trong khi lặp lại để lặp lại nội dung tập tin.
  13. Ghi/lưu trữ nội dung của tệp trong biến ch.
  14. Sử dụng điều kiện if và hàm eof() ở cuối tệp để đảm bảo trình biên dịch tiếp tục đọc từ tệp nếu không đạt đến cuối.
  15. Sử dụng câu lệnh break để ngừng đọc từ tệp khi đã kết thúc.
  16. In nội dung của biến ch trên bàn điều khiển.
  17. Kết thúc thời gian cơ thể.
  18. Kết thúc phần thân của câu lệnh else.
  19. Gọi hàm close() để đóng file.
  20. Chương trình phải trả về giá trị sau khi hoàn thành thành công.
  21. Phần cuối của hàm main().

Tổng kết

  • Với việc xử lý tệp, đầu ra của chương trình có thể được gửi và lưu trữ trong một tệp.
  • Sau đó, một số thao tác có thể được áp dụng cho dữ liệu khi ở trong tệp.
  • Luồng là một sự trừu tượng hóa đại diện cho một thiết bị nơi thực hiện các hoạt động đầu vào/đầu ra.
  • Một luồng có thể được biểu diễn dưới dạng đích hoặc nguồn của các ký tự có độ dài không xác định.
  • Thư viện fstream cung cấp C++ lập trình viên với các phương pháp xử lý tập tin.
  • Để sử dụng thư viện, bạn phải đưa nó vào chương trình của mình bằng cách sử dụng chỉ thị tiền xử lý #include.