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