STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

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

    Sử dụng fstream để đọc file, ghi file, xử lý file đơn giản trong C++.
    04/08/2014
    26/09/2020
    4 phút đọc
    Đọc Ghi File Cơ Bản với fstream

    Dường như không có phần mềm nào không thao tác với file, trong bài viết này, tôi sẽ hướng dẫn nhanh việc 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, hàm dùng trong bài này được viết và thực thi tốt với Visual Studio 2019 Community, các thư viện C++ bao gồm fstream, iostreamstring. Để thao tác với file trong C++ ta 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 này tôi dùng fstream.

    Đọc dữ liệu từ file

    Giả sử ta có 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 neu co 1 nen tang lap trinh tot.

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

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	fstream f;
    	f.open("input.txt", ios::in);
    
    	string data;
    	getline(f, data);
    
    	f.close();
    
    	cout << data;
    }

    Như code trên ta cần thực hiện các bước như mở file, đọc dữ liệu, đóng file sau đó sử dụng dữ liệu tùy vào từng trường hợp (trong trường hợp này chỉ là in dữ liệu ra màn hình).

    Tóm tắt các bước thực hiện

    1. Chèn thư viện cần thiết để xử lý file vào code (dòng 1, 2, 3).
    2. Mở file (dòng 10 và 11), lưu ý rằng có mở file thì phải có đóng file (dòng 15) sau khi đọc dữ liệu xong với input.txt là tên file cần đọc, ios::in là mục đích đọc file.
    3. Sau khi mở file ta sẽ đọc dữ liệu từ file vào string data (dòng 12, 13). Lưu ý sẽ có nhiều vấn đề nảy sinh ở giai đoạn này, getline chỉ lấy 1 dòng trên file, nếu file có nhiều dòng ta xem phần dưới của bài.
    4. Đóng file, điều này cần lưu ý vì sẽ rất nhiều bạn chưa có kinh nghiệm sẽ dễ quên (dòng 15).

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

    #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())
    	{
    		getline(f, line);
    		data += line;
    	}
    
    	f.close();
    
    	cout << data;
    }

    f.eof() sẽ kiểm tra xem đã kết thúc file chưa? Nếu chưa, ta tiếp tục lấy dữ liệu từ file vào line.

    Ghi dữ liệu vào file

    #include <iostream>
    #include <string>
    
    // 1. Thêm thư viện fstream xử lý file vào
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
    	// 2. Mở file
    	fstream f;
    	f.open("output.txt", ios::out);
    
    	// 3. Ghi dữ liệu vào file, trường hợp này ta có data là dữ liệu
    	string data = "Site: www.stdio.vn\nHo Ten: La Kien Vinh\nCong Viec: Dao Tao Lap Trinh Vien";
    	f << data;
    
    	// 4. Đóng file
    	f.close();
    }

    Với những lệnh trên ta cần thực hiện bước 1. 2. và 4. như một thủ tục, giai đoạn 3. là giai đoạn chính ta sẽ lưu dữ liệu mà ta có vào file.

    Tóm tắt các bước thực hiện

    1. Chèn thư viện cần thiết để xử lý file vào codes (dòng 5).
    2. Mở file (dòng 12 và 13), lưu ý rằng có mở file thì phải có đóng file. output.txt là tên file ta sẽ lưu dữ liệu vào ios::out là diễn đạt mục đích ta mở file là muốn ghi file.
    3. Sau khi mở file ta sẽ ghi dữ liệu vào file một cách đơn giản (dòng 17). Lưu ý hướng của << nó mang ý nghĩa rằng, luồng dữ liệu sẽ đi từ string data vào file f.
    4. Đóng file, điều này cần lưu ý vì sẽ rất nhiều bạn chưa có kinh nghiệm sẽ dễ quên (dòng 20).

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

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

    Với đường dẫn tuyệt đối, thì bạn có thể đặt file hoặc tìm file tại đường dẫn tuyệt đối đó.

    Với đường dẫn tương đối (trường hợp này chúng ta sử dụng nhiều)

    • Nếu bạn thực thi chương trình thông qua Visual Studio file sẽ tại đường dẫn tương đối tính từ thư mục chứa project (*.vcxproj), hoặc Working Directory do bạn tùy chỉnh. Trong trường hợp bài viết này dành cho người mới học lập trình, bạn không nên tìm hiểu sâu lúc này.
    • Nếu bạn thực thi chương trình thông qua việc tự gọi thực thi chương trình .exe của bạn thông qua click chuột hoặc enter thì sẽ là đường dẫn tương đối tính từ thư mục chứa file .exe.

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

    Bạn 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 vì string data = "chuoi du lieu"
    f << data;

    Xử lý file còn nhiều vấn đề phức tạp, bạn hãy làm quen với điều này trước.

    Tham khảo

    0
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích.. Tìm hiểu thêm.

    Đề xuất

    Đọc Ghi File Cơ Bản Trong C#
    Hướng dẫn đọc và ghi file cơ bản sử dụng đối tượng File trong C#. Nhờ có ...
    Đọc và Ghi File trong Python
    Đọc và ghi file text với Python thông qua code ví dụ với các mode cơ bản ...
    28/03/2015

    Khám phá

    Cấu Trúc File CSV và Cách Đọc - Ghi File CSV
    File .csv là gì, cấu trúc file CSV - cách tạo, đọc ghi file csv với các ...
    Căn Bản về Đọc và Ghi File trong Ngôn Ngữ C++
    Căn bản về thao tác đọc/ghi file trong C++.
    22/07/2015
    Tìm Hiểu về fstream
    Kiến thức về file là một trong những kiến thức quan trọng đối với các ...
    11/05/2015
    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản
    Trong đời thường, bạn sẽ gặp các file ảnh có định dạng .PNG, .JPG, .TGA, ...
    Bitmap - Khái Niệm Và Các Xử Lý Cơ Bản
    Kiến trúc file bmp và đọc ghi file bmp bằng C/C++.
    Lưu Trữ Dữ Liệu trong Android với Unity
    Hướng dẫn đọc và ghi file trên Android với đường dẫn ...
    Đọc Ghi Tất Cả Các Định Dạng Ảnh với FreeImage trong C++
    Hướng dẫn sử dụng FreeImage để đọc, ghi, xử lý ảnh trong C++.
    28/09/2014
    Đánh Dấu và Kiểm Tra Bản Quyền Tài Liệu Số
    Hướng dẫn 1 trong những phương pháp để đánh dấu bản quyền và kiểm tra ...
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020