#include <iostream>
#include <fstream>
using namespace std;
struct staff
{
int num;
char name[10];
int age;
float salary;
};
int main()
{
fstream iofile;
iofile.open("file.dat",fstream::in|fstream::out|fstream::binary); //换成ios::也可以!
// 以二进制格式存取结构体,I / O一起!
//c的结构体语法: struct staff s[5]={}
//cout<<iofile.tellg()<<endl;//测试当前的文件指针位置
staff out1, s[5] = //定义一个结构体
{
{1,"aaa",20,8000},
{2,"bbb",21,9000},
{3,"ccc",22,10000},
{4,"ddd",23,12000},
{5,"eee",24,14000}
};
for(int i=0;i<5;i++)
{
//iofile.read((char*)&out1,sizeof(out1));
cout<<"num: "<<s[i].num<<" name: "<<s[i].name
<<" age: "<<s[i].age<<" salary: "<<s[i].salary<<endl;
}
if(!iofile)
{
cout <<"open error" <<endl;
abort();
}
for(int i=0;i <5;i++)
{
iofile.write((char*)&s[i],sizeof(s[i]));
}
//cout<<iofile.tellg()<<endl;// 现在文件指针位置已经不是开头了, 是120!
iofile.seekg (0, ios::beg);//要注意的是,你存完文件后, 文件指针不再定位在文件头,
// 可以使用cout<<iofile.tellg()<<endl;查看 当前文件指针位置
// 需要使用seekg将
// 指针定位到文件头, 以便之后的读取, 否则会乱码!(不信,去掉这句试试!!!!)
cout<<endl;// 分隔开输入输出!
for(int i=0;i<5;i++)
{
iofile.read((char*)&out1,sizeof(out1));
cout<<"num: "<<out1.num<<" name: "<<out1.name
<<" age: "<<out1.age<<" salary: "<<out1.salary<<endl;
}
iofile.close(); // 关闭文件
system("PAUSE"); // DEV C++编译器,没办法,得看结果,呵呵!
return 0;
}