Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C/C++에서 바이너리 파일 읽기 및 쓰기

<시간/>

쓰기

C++에서 바이너리 파일을 작성하려면 write 메소드를 사용하십시오. "put" 포인터의 위치에서 시작하여 주어진 스트림에 주어진 바이트 수를 쓰는 데 사용됩니다. 넣기 포인터가 현재 파일 끝에 있으면 파일이 확장됩니다. 이 포인터가 파일의 중간을 가리키면 파일의 문자를 새 데이터로 덮어씁니다.

파일에 쓰는 동안 오류가 발생하면 스트림은 오류 상태가 됩니다.

쓰기 방식의 구문

ostream& write(const char*, int);

독서

C++에서 바이너리 파일을 읽으려면 read 메소드를 사용하십시오. 주어진 스트림에서 주어진 수의 바이트를 추출하여 첫 ​​번째 매개변수가 가리키는 메모리에 배치합니다. 파일을 읽는 동안 오류가 발생하면 스트림은 오류 상태가 되고 이후의 모든 읽기 작업은 실패합니다.

gcount()는 이미 읽은 문자 수를 계산하는 데 사용할 수 있습니다. 그런 다음 clear()를 사용하여 스트림을 사용 가능한 상태로 재설정할 수 있습니다.

읽기 메소드의 구문

ifstream& write(const char*, int);

알고리즘

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.

예시 코드

#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;
}

출력

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