Computer >> Máy Tính >  >> Lập trình >> C ++

Đọc / ghi các đối tượng lớp từ / đến tệp trong C ++

Thư viện tiêu chuẩn iostream có hai phương thức cin, để chấp nhận đầu vào từ luồng đầu vào tiêu chuẩn và cout để in đầu ra đến luồng đầu ra tiêu chuẩn. Trong bài viết này, chúng ta sẽ tìm hiểu cách đọc dữ liệu từ tệp vào đối tượng lớp và cách ghi dữ liệu vào tệp đối tượng lớp.

Việc đọc và ghi dữ liệu vào và từ các tệp yêu cầu một thư viện chuẩn khác của C ++ . Ba kiểu dữ liệu chính của fstream là -

  • ifstream - đại diện cho luồng tệp đầu vào và đọc thông tin từ tệp.
  • ofstream - đại diện cho dòng tệp đầu ra và ghi thông tin vào tệp.
  • fstream - đại diện cho luồng tệp chung và có khả năng của cả hai.

Tạo đối tượng lớp

Chúng tôi đang lấy một Nhân viên cấp có Tên, Employee_ID và Lương làm thành viên dữ liệu công khai của nó.

Nhân viên
class Employee {
   public:
      char Name[];
      long Employee_ID;
      int Salary;
} ;
Employee Emp_1;
Emp_1.Name=”Jhonson”;
Emp_1.Employee_ID=212020;
Emp_1.Salary=11000;

Tạo đối tượng tệp

Cú pháp

fstream/ofstream/ifstream object_name;
void open(const char *filename, ios::openmode);
ofstream file1;
file1.open( “Employee.txt”, ios::app );
  • Ở đây file1 là đối tượng được sử dụng để mở tệp Employee.txt ở chế độ nối thêm (nội dung mới được nối vào cuối). Loại đối tượng file1 là của dòng, có nghĩa là chúng ta có thể ghi vào Employee.txt.

ifstream file2;
file2.open( “Employee.txt”, ios::in );
  • Ở đây file2 là đối tượng dùng để mở tệp Employee.txt ở chế độ đầu vào để đọc nội dung. Loại đối tượng file1 là ifstream có nghĩa là chúng ta chỉ có thể đọc dataf từ Employee.txt.

Viết và đọc các đối tượng lớp

file1.write( (char*)&Emp_1, sizeof(Emp1) );
  • Ở đây dữ liệu có trong đối tượng lớp Emp_1 được ghi vào tệp Employee.txt bằng cách gọi hàm ghi. (char *) &Emp_1 được sử dụng để trỏ vào đầu đối tượng và sizeof (Emp_1) tính số byte được sao chép trong tệp.

file2.read( (char*)&Emp_1, sizeof(Emp1) );
  • Ở đây, dữ liệu có trong đối tượng lớp Emp_1 được đọc từ tệp Employee.txt bằng cách gọi hàm đọc. (char *) &Emp_1 được sử dụng để trỏ vào đầu đối tượng vàsizeof (Emp_1) tính số byte được đọc từ tệp.

Đóng tệp

file1.close();
file2.close();

Để đóng luồng đầu vào và luồng đầu ra của tệp.

Ví dụ

#include <iostream>
#include <fstream>
using namespace std;
// Class to define the properties
class Employee {
public:
   string Name;
   int Employee_ID;
   int Salary;
};
int main(){
   Employee Emp_1;
   Emp_1.Name="John";
   Emp_1.Employee_ID=2121;
   Emp_1.Salary=11000;
   //Wriring this data to Employee.txt
   ofstream file1;
   file1.open("Employee.txt", ios::app);
   file1.write((char*)&Emp_1,sizeof(Emp_1));
   file1.close();
   //Reading data from EMployee.txt
   ifstream file2;
   file2.open("Employee.txt",ios::in);
   file2.seekg(0);
   file2.read((char*)&Emp_1,sizeof(Emp_1));
   printf("\nName :%s",Emp_1.Name);
   printf("\nEmployee ID :%d",Emp_1.Employee_ID);
   printf("\nSalary :%d",Emp_1.Salary);
   file2.close();
   return 0;
}

Đầu ra

Name: John
Employee ID: 2121
Salary: 11000