从二进制文件中读取数据(P316)
/*
2、用istream::read()成员函数读文件
istream & read(char * buffer,int nCount);
该成员函数从文件中读取nCount个字节的内容,存放到buffer所指向的内存缓冲区中,返回值是对函数所作用的对象引用。
3、用ostream::gcount()成员函数得到读取字节数
int gcount();
如果要知道每次读操作成功读取了多少个字节,可以在read()函数执行后立即调用文件流对象的成员函数gcount(),其返回值就是最近一次read()函数执行时成功读取的字节数。
*/
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
class CStudent
{
public:
char id[11]; //学号
char name[21]; //姓名
int score; //成绩
};
int main()
{
CStudent stu;
int count=0,nbyte=0;
ifstream inFile("students.dat",ios::in|ios::binary);//以二进制读方式打开
if(!inFile) //条件成立,则说明文件打开错误
{
cout <<"创建文件失败"<<endl;
return 0;
}
cout <<"学生学号 姓名\t\t\t 成绩\n";
while (inFile.read((char*)&stu,sizeof(stu))) //读取记录直到文件结束
{
cout <<left<<setw(10)<<stu.id<<" "<<setw(20)<<stu.name
<<" "<<setw(3)<<right<<stu.score<<endl;
count ++;
nbyte +=inFile.gcount(); //得到本次read读取的字节数量
}
cout<<"共有记录数:"<<count<<",字节数:"<<nbyte<<endl;
inFile.close();
return 0;
}

浙公网安备 33010602011771号