64,654
社区成员
发帖
与我相关
我的任务
分享
void ReadData()
{
Student *p = NULL, *q = NULL;
T_Student t_std;
m_length = 0;
fstream fdata;
fdata.open("E:\\StudentSystemData.orz", ios::in | ios::binary);
int stdnumber = 0;
if (!fdata)
{
cerr << "File would be open" << endl;
return;
}
fdata.seekg(0, ios::beg);
fdata.read((char*)&stdnumber, sizeof(int));
m_length = 4;
for (int i = 0; i < stdnumber; i++)
{
ReadItem(t_std);
if (head == NULL)
{
head = new Student;
head->SetData(t_std);
phead = head;
q = head;
}
else
{
p = new Student;
p->SetData(t_std);
q->next = p;
p = p->next;
}
}
}
void ReadItem(T_Student t_std)
{
fstream fdata;
fdata.open("E:\\StudentSystemData.orz", ios::in | ios::binary);
ReadString(t_std.t_name);
ReadString(t_std.t_id);
ReadString(t_std.t_sex);
fdata.seekp(m_length, ios::beg);
fdata.read((char*)&t_std.t_phy, sizeof(int));
fdata.read((char*)&t_std.t_eng, sizeof(int));
fdata.read((char*)&t_std.t_math, sizeof(int));
fdata.read((char*)&t_std.t_cs, sizeof(int));
fdata.read((char*)&t_std.t_cproject, sizeof(int));
m_length += 20;
fdata.close();
}
void ReadString(string &str)
{
fstream fdata;
int length = 0;
char *s;
fdata.open("E:\\StudentSystemData.orz", ios::in | ios::binary);
fdata.seekp(m_length, ios::beg);
fdata.read((char*)&length, sizeof(int));
m_length += length + 4;
s = new char[length];
fdata.read(s, length);
str = s;
delete[]s;
}
我是用m_length来记录指针移动的距离的,写入的时候单步调试时看了没问题,字节数也正确,但是读取时只能够读取最开始的stdnumber学生人数,谢谢你的帮助