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

Đọc và ghi tệp nhị phân trong C / C ++

Viết

Để viết một tệp nhị phân trong C ++, hãy sử dụng phương thức ghi. Nó được sử dụng để ghi một số byte nhất định trên luồng nhất định, bắt đầu từ vị trí của con trỏ "put". Tệp được mở rộng nếu con trỏ đặt hiện ở cuối tệp. Nếu con trỏ này trỏ vào giữa tệp, các ký tự trong tệp sẽ được ghi đè bằng dữ liệu mới.

Nếu có bất kỳ lỗi nào xảy ra trong quá trình ghi vào tệp, luồng sẽ được đặt ở trạng thái lỗi.

Cú pháp của phương thức ghi

ostream& write(const char*, int);

Đọc

Để đọc một tệp nhị phân trong C ++, hãy sử dụng phương pháp đọc. Nó trích xuất một số byte nhất định từ luồng đã cho và đặt chúng vào bộ nhớ, được trỏ tới bởi tham số đầu tiên. Nếu có bất kỳ lỗi nào xảy ra trong quá trình đọc trong tệp, luồng được đặt ở trạng thái lỗi, tất cả hoạt động đọc trong tương lai sẽ không thành công.

gcount () có thể được sử dụng để đếm số ký tự đã được đọc. Sau đó, clear () có thể được sử dụng để đặt lại luồng về trạng thái có thể sử dụng được.

Cú pháp của phương thức đọc

ifstream& write(const char*, int);

Thuật toán

Begin
   Create a structure Student to declare variables.
   Open binary file to write.
   Check if any error occurs in file opening.
   Initialize the variables with data.
   If file open successfully, write the binary data using write method.
      Close the file for writing.
   Open the binary file to read.
   Check if any error occurs in file opening.
   If file open successfully, read the binary data file using read method.
      Close the file for reading.
   Check if any error occurs.
   Print the data.
End.

Mã mẫu

#include<iostream>
#include<fstream>
using namespace std;
struct Student {
   int roll_no;
   string name;
};
int main() {
   ofstream wf("student.dat", ios::out | ios::binary);
   if(!wf) {
      cout << "Cannot open file!" << endl;
      return 1;
   }
   Student wstu[3];
   wstu[0].roll_no = 1;
   wstu[0].name = "Ram";
   wstu[1].roll_no = 2;
   wstu[1].name = "Shyam";
   wstu[2].roll_no = 3;
   wstu[2].name = "Madhu";
   for(int i = 0; i < 3; i++)
      wf.write((char *) &wstu[i], sizeof(Student));
   wf.close();
   if(!wf.good()) {
      cout << "Error occurred at writing time!" << endl;
      return 1;
   }
   ifstream rf("student.dat", ios::out | ios::binary);
   if(!rf) {
      cout << "Cannot open file!" << endl;
      return 1;
   }
   Student rstu[3];
   for(int i = 0; i < 3; i++)
      rf.read((char *) &rstu[i], sizeof(Student));
   rf.close();
   if(!rf.good()) {
      cout << "Error occurred at reading time!" << endl;
      return 1;
   }
   cout<<"Student's Details:"<<endl;
   for(int i=0; i < 3; i++) {
      cout << "Roll No: " << wstu[i].roll_no << endl;
      cout << "Name: " << wstu[i].name << endl;
      cout << endl;
   }
   return 0;
}

Đầu ra

Student’s Details:
Roll No: 1
Name: Ram
Roll No: 2
Name: Shyam
Roll No: 3
Name: Madhu