在C / C ++中读写二进制文件
写作
要使用C++编写二进制文件,请使用write方法。从“放置”指针的位置开始,它用于在给定的流上写入给定数量的字节。如果放置指针当前位于文件末尾,则文件将被扩展。如果此指针指向文件的中间,则文件中的字符将被新数据覆盖。
如果在写入文件的过程中发生任何错误,则将流置于错误状态。
写方法的语法
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 << "不能打开文件!" << 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 << "写入时发生错误!" << endl; return 1; } ifstream rf("student.dat", ios::out | ios::binary); if(!rf) { cout << "不能打开文件!" << 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 << "读取时发生错误!" << 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