Search…

Đọc Ghi File Cơ Bản với fstream

05/11/20204 min read
Sử dụng fstream để đọc file trong C++, ghi file và xử lý file đơn giản trong C++.

Dường như không có phần mềm nào không thao tác với file, bài viết này hướng dẫn nhanh thao tác lưu trữ và lấy dữ liệu từ file thông qua thư viện C++ fstream.

Môi trường và thư viện fstream

Các đối tượng, phương thức dùng trong bài này được viết và thực thi tốt với Visual Studio, các thư viện C++ bao gồm fstream, iostreamstring.

Để thao tác với file trong C++ có thể dùng ifstream cho việc đọc file, ofstream cho việc ghi file hoặc fstream cho cả 2 mục đích, trong trường hợp bài viết này dùng fstream.

Đọc dữ liệu từ file

Tạo file input.txt với nội dung như sau:

C++ la ngon ngu lap trinh co the tao ra hieu suat cao cho chuong trinh nhung do phuc tap trong lap trinh cao.

Chương trình đọc dữ liệu trong file input.txt và thể hiện ra màn hình:

#include <iostream>
#include <string>
#include <fstream>  // (1)

using namespace std;

int main()
{
	fstream f;                    // (2)
	f.open("input.txt", ios::in); // (2)

	string data;                  // (3)
	getline(f, data);             // (3)

	f.close();                    // (4)

	cout << data;
}

Như code trên cần thực hiện các bước:

  • Mở file bằng f.open.
  • Đọc dữ liệu từ file vào data thông qua getline.
  • Đóng file bằng f.close sau khi lấy dữ liệu xong.

Tóm tắt các bước đọc file với fstream

  1. Chèn thư viện cần thiết để xử lý file vào code (1).
  2. Mở file (2) với input.txt là tên file cần đọc, ios::in với mục đích mở file là đọc file.
    • Lưu ý có mở file thì phải có đóng file (4).
  3. Sau khi mở file, tiến hành đọc dữ liệu từ file vào string data (3).
    • Lưu ý sẽ có nhiều vấn đề nảy sinh ở đây, getline chỉ lấy 1 dòng trên file, nếu file có nhiều dòng, đọc thêm phần dưới của bài.
  4. Đóng file (4) sau khi đã đọc xong dữ liệu.

Đọc file input.txt có nhiều dòng

Tạo file input.txt với nội dung như sau:

DANH SACH MANG XA HOI:
Mang xa hoi Facebook ket noi moi nguoi.
Mang xa hoi Youtube chia se Video clip.
Mang xa hoi Tiktok cho gioi tre.

Chương trình đọc dữ liệu trong file input.txt với nhiều dòng và thể hiện ra màn hình:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	fstream f;
	f.open("input.txt", ios::in);

	string data;

	string line;
	while (!f.eof())          // (1)
	{
		getline(f, line); // (2)
		data += line;
	}

	f.close();

	cout << data;
}
  • (1) f.eof() kiểm tra xem đã kết thúc file chưa?
  • (2) nếu chưa, tiếp tục lấy dữ liệu (dòng kế tiếp) từ file vào line.

Ghi dữ liệu vào file

#include <iostream>
#include <string>
#include <fstream> // (1)

using namespace std;

int main()
{
	fstream f;                      // (2)
	f.open("output.txt", ios::out); // (2)

	string data = "Board: Modern C++\n"
	              "Website: www.stdio.vn/modern-cpp\n"
	              "Mo ta: Lap trinh C++"; // (3)
	f << data;                            // (3)

	f.close(); // (4)

	return 0;
}

Tóm tắt các bước ghi file với fstream

  1. Chèn thư viện cần thiết để xử lý file vào code (1).
  2. Mở file (2) với input.txt là tên file cần đọc, ios::out với mục đích mở file là ghi file.
    • Lưu ý có mở file thì phải có đóng file (4).
  3. Sau khi mở file, tiến hành ghi dữ liệu từ biến string data  vào file (3).
  4. Đóng file (4) sau khi đã ghi xong dữ liệu vào file.

Một số vấn đề cần lưu ý

File được lưu ở đâu?

Với đường dẫn tuyệt đối

Có thể đặt file hoặc tìm file tại đường dẫn tuyệt đối đó. Ví dụ file được lưu tại D://data/input.txt. thì đường dẫn truyền vào hàm f.openD://data/input.txt.

f.open("D://data/input.txt, ios::in);

Với đường dẫn tương đối

Nếu thực thi chương trình thông qua Visual Studio, đường dẫn tương đối tính từ thư mục chứa project (*.vcxproj), hoặc Working Directory tùy chỉnh. Do đó nếu đặt file chung thư mục chứa file *.vcxproj thì có thể sử dụng đường dẫn tương đối la "input.txt" hoặc "./input.txt".

 f.open("input.txt, ios::in);

Nếu thực thi chương trình bằng cách tự gọi thực thi chương trình .exe (click chuột hoặc enter) thì đường dẫn tương đối tính từ thư mục chứa file .exe.

* Trường hợp người mới học lập trình không nên tìm hiểu sâu vào lúc này.

Có thể dùng kiểu char, short, int, float, double thay vì string?

Có thể thay thế các kiểu dữ liệu cần thiết để đọc ghi thay vì chỉ dùng string. Ví dụ trong trường hợp ghi vào file 1 giá trị kiểu int.

int data = 6; // Thay vi string data = "chuoi du lieu"
f << data;

Tham khảo thêm

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024