Đọc/ghi File trong C++ | fstream trong C++

Cho đến nay, chúng tôi đã sử dụng thư viện chuẩn dòng dữ liệu, Cung cấp phương pháp cin và cout Đọc từ đầu vào tiêu chuẩn và ghi vào đầu ra tiêu chuẩn tương ứng. Chương này sẽ hướng dẫn bạn cách đọc và ghi tệp.Điều này yêu cầu một thư viện chuẩn C ++ khác, là lưu lượng, Xác định 3 kiểu dữ liệu mới:

loại dữ liệu
Sự miêu tả

Chảy ra
Kiểu dữ liệu này đại diện cho dòng tệp đầu ra, được sử dụng để tạo tệp và ghi thông tin vào các tệp này

Nếu dòng chảy
Kiểu dữ liệu này đại diện cho dòng tệp đầu vào, được sử dụng để đọc thông tin từ tệp

lưu lượng
Kiểu dữ liệu này thường đại diện cho Dòng tệp và có các khả năng của dòng và ifstream, nghĩa là bạn có thể tạo tệp, ghi thông tin vào tệp và đọc thông tin từ tệp.

Để thực hiện xử lý tệp trong C ++, bạn cần đưa tệp tiêu đề vào tệp nguồn của chương trình C ++ Và .

Mở tệp bằng C ++

Tệp phải được mở trước khi thông tin có thể được đọc từ hoặc ghi vào nó.Hoặc đối tượng Chảy ra Hoặc đối tượng lưu lượng Có thể được sử dụng để mở tệp để ghi hoặc sử dụng đối tượng ifstream để mở tệp dưới dạng chỉ đọc. Đây là cú pháp tiêu chuẩn của hàm open (), là một thành viên của đối tượng fstream trong C ++. , Ifstream và ofstream:

void open(const char *ten_file, ios::che_do);

Ở đây, tham số đầu tiên chỉ định tên và vị trí của tệp sẽ được mở và tham số thứ hai của hàm thành viên Mở ra() Xác định chế độ mở tệp.

chế độ
Sự miêu tả

ios :: ứng dụng
Chế độ bổ sung.Tất cả đầu ra của tệp được nối vào cuối tệp

ios :: đã ăn
Mở tệp để xuất và di chuyển điều khiển đọc / ghi vào cuối tệp

ios :: trong
Mở tệp để đọc

ios :: đầu ra
Mở một tệp để viết

ios :: trunc
Nếu tệp này đã tồn tại, nội dung của nó sẽ bị cắt bớt trước khi mở tệp

Bạn có thể kết hợp hai hoặc nhiều giá trị này bằng cách kết hợp chúng với nhau (sử dụng (|)), bạn có thể thực hiện theo cú pháp sau:

ofstream outfile; 
outfile.open("file.dat", ios::out | ios::trunc );

Theo cách tương tự, bạn có thể mở tệp để đọc và ghi như sau:

fstream QTM; 
QTM.open("file.dat", ios::out | ios::in );

Đóng tệp bằng C ++

Khi chương trình C ++ kết thúc, nó sẽ tự động đóng tất cả các luồng, giải phóng tất cả bộ nhớ được cấp phát và đóng tất cả các tệp đang mở. Nhưng đối với các lập trình viên, một thói quen tốt là đóng tất cả các tệp đang mở trước khi kết thúc chương trình. Đây là cú pháp chung của hàm. Khép kín() Trong C ++, nó là thành viên của các đối tượng fstream, ifstream và ofstream trong C ++:

void close();

Viết tệp bằng C ++

Trong quá trình lập trình C ++, bạn có thể sử dụng toán tử chèn luồng (<<) để ghi thông tin từ chương trình vào tệp, giống như bạn sử dụng toán tử để xuất thông tin ra màn hình.Sự khác biệt duy nhất là bạn sử dụng một đối tượng Chảy ra Hoặc lưu lượng Trong C ++ thay vì các đối tượng Kurt Trong C ++.

Đọc tệp trong C ++

Bạn có thể sử dụng toán tử trích xuất luồng (>>) để đọc thông tin từ tệp trong chương trình C ++, giống như bạn sử dụng toán tử này để nhập dữ liệu nhập từ bàn phím. Sự khác biệt là bạn sử dụng đối tượng ifstream hoặc fstream thay vì đối tượng cin trong C ++.

C ++ ví dụ về đọc và ghi tệp

Chương trình C ++ sau sẽ mở một tệp ở chế độ đọc-ghi. Sau khi ghi thông tin do người dùng nhập vào tệp có tên qtm.dat, chương trình đọc thông tin từ tệp và xuất kết quả trên màn hình:

#include <fstream> 
#include <iostream> 
using namespace std; 
int main () 
{ 
    char data[100]; // mo mot file trong che do write. 
    ofstream outfile; 
    outfile.open("qtm.dat"); 
    cout << "Ghi du lieu toi file!" << endl; 
    cout << "Nhap ten cua ban: "; 
    cin.getline(data, 100); 
    // ghi du lieu da nhap vao trong file. 
    outfile << data << endl; 
    cout << "Nhap tuoi cua ban: "; 
    cin >> data; 
    cin.ignore(); 
    // ghi du lieu da nhap vao trong file. 
    outfile << data << endl; 
    // dong file da mo. 
    outfile.close(); 
    //mo mot file trong che do read. 
    ifstream infile; 
    infile.open("qtm.dat"); 
    cout << "n===========================n" ; 
    cout << "Doc du lieu co trong file!" << endl; infile >> data; 
    // ghi du lieu tren man hinh. 
    cout << data << endl; 
    // tiep tuc doc va hien thi du lieu. 
    infile >> data; cout << data << endl; 
    // dong file da mo. 
    infile.close(); 
    return 0; 
}

Biên dịch và chạy chương trình C ++ trên sẽ cho kết quả sau:

Kết quả C ++ sau khi đọc và ghi tệp

Ví dụ trên sử dụng các hàm bổ sung trong đối tượng cin, chẳng hạn như hàm getline () để đọc dòng từ bên ngoài và hàm ignore () để bỏ qua các ký tự thừa ở bên trái của lệnh đọc trước đó.

Con trỏ vị trí tệp trong C ++

Cả hai đối tượng istream và ostream đều cung cấp các hàm thành viên để xác định lại vị trí của con trỏ vị trí tệp.Các chức năng thành viên này là tìm kiếm (Viết tắt của seek get) được sử dụng cho istream và tìm kiếm (Viết tắt của seek put) được sử dụng cho ostream trong C ++. Tham số cho tìm kiếmtìm kiếm Tình yêu là một Số nguyên dàiBạn có thể chỉ định tham số thứ hai để chỉ định hướng tìm kiếm.Hướng tìm kiếm có thể là ios :: xin (mặc định) để xác định vị trí so với đầu của một dòng, Ios :: cur để xác định vị trí so với vị trí hiện tại dòng Hoặc ios :: end chỉ định vị trí liên quan đến phần cuối của Luồng trong C ++. Con trỏ vị trí tệp là một giá trị nguyên được sử dụng để chỉ định vị trí trong tệp, được tính bằng số byte từ vị trí bắt đầu. Tập tin. Sau đây là một số ví dụ về định vị con trỏ vị trí tệp trong C ++:

// xac dinh vi tri byte thu n cua doi tuong file 
doi_tuong_file.seekg( n ); 
// xac dinh vi tri n byte ve sau cua doi tuong file 
doi_tuong_file.seekg( n, ios::cur ); 
// xac dinh vi tri n byte bat dau tu cuoi cua doi tuong file 
doi_tuong_file.seekg( n, ios::end ); 
// xac dinh vi tri tai cuoi doi tuong file 
doi_tuong_file.seekg( 0, ios::end );

Theo Tutorialspoint

Trước: Giao diện trong C ++ (lớp trừu tượng)

Tiếp theo: Xử lý ngoại lệ trong C ++

  • Cú pháp C ++ cơ bản
  • Các kiểu dữ liệu trong C / C ++
  • Ngày và giờ trong C ++
  • Bài tập C ++ trên IF ELSE
  • Nhận xét trong C / C ++
  • Các kiểu biến trong C / C ++