64,639
社区成员
发帖
与我相关
我的任务
分享
int m_length = 0;//记录字节数,用于移动指针
void SaveData()
{
T_Student t_std;
int stdnumber = head->GetStdNum();
fstream fdata;
fdata.open("E:\\StudentSystemData.orz", ios::out | ios::binary);
if (!fdata)
{
cerr << "File would not be open" << endl;
return;
}
fdata.seekp(0, ios::beg);
T_Student mark = {"", "", "", 0, 0, 0, 0, 0, 0};//标志结束
fdata.write((char*)&stdnumber, sizeof(int));
m_length = 4;
for (int i = 0; i < stdnumber; i++)
{
head->GetData(t_std.t_name, t_std.t_id, t_std.t_sex, t_std.t_phy, t_std.t_eng, t_std.t_math, t_std.t_cs, t_std.t_cproject);//这里是将类的对象的内容读取出来
SaveItem(&t_std);
head = head->next;
}
SaveItem(&mark);
}
void SaveItem(T_Student *t_std)
{
fstream fdata;
fdata.open("E:\\StudentSystemData.orz", ios::out | ios::binary);
if (!fdata)
{
cerr << "File would not be open" << endl;
return;
}
SaveString(t_std->t_name);
SaveString(t_std->t_id);
SaveString(t_std->t_sex);
fdata.seekp(m_length, ios::beg);
fdata.write((char*)&t_std->t_phy, sizeof(int));
fdata.write((char*)&t_std->t_eng, sizeof(int));
fdata.write((char*)&t_std->t_math, sizeof(int));
fdata.write((char*)&t_std->t_cs, sizeof(int));
fdata.write((char*)&t_std->t_cproject, sizeof(int));
m_length += 20;
fdata.close();
}
void SaveString(string &str)
{
fstream fdata;
fdata.open("E:\\StudentSystemData.orz", ios::out | ios::binary);
fdata.seekp(m_length, ios::beg);
int length = 0;
length = str.length();
length++;
fdata.write((char*)&length, sizeof(int));
fdata.write(str.c_str(), length-1);
fdata.write("\0", 1);
m_length += 4 + length;
fdata.close();
}
int m_length;//记录字节数,以便于指针的移动
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; //string 的长度
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;
}
void SaveData()
{
fstream fdata;
T_Student t_std;
int stdnumber = head->GetStdNum();
fdata.open("E:\\StudentSystemData.dat", ios::out | ios::binary);
fdata.seekp(0, ios::beg);
if (!fdata)
{
cerr << "File could not be open" << endl;
return;
}
int len = 0;
fdata.write((char*)&stdnumber, sizeof(int));
while (head)
{
head->GetData(t_std.t_name, t_std.t_id, t_std.t_sex, t_std.t_phy, t_std.t_eng, t_std.t_math, t_std.t_cs, t_std.t_cproject);
len = t_std.t_name.length();
fdata.write((char*)&len, sizeof(int));
fdata.write(t_std.t_name.c_str(), len);
len = t_std.t_id.length();
fdata.write((char*)&len, sizeof(int));
fdata.write(t_std.t_id.c_str(), len);
len = t_std.t_sex.length();
fdata.write((char*)&len, sizeof(int));
fdata.write(t_std.t_sex.c_str(), len);
fdata.write((char*)&t_std.t_phy, sizeof(int));
fdata.write((char*)&t_std.t_eng, sizeof(int));
fdata.write((char*)&t_std.t_math, sizeof(int));
fdata.write((char*)&t_std.t_cs, sizeof(int));
fdata.write((char*)&t_std.t_cproject, sizeof(int));
head = head->next;
}
fdata.close();
}
bool ReadData()
{
fstream fdata;
T_Student t_std;
int len;
int stdnumber;
fdata.open("D:\\StudentSystemData.dat", ios::in | ios::binary);
fdata.seekg(0, ios::beg);
if (!fdata)///////////////////////////////////////////////////////////fdata会执行if语句里的,然后读取不到了
{
cerr << "File could not be open" << endl;
return false;
}
fdata.read((char*)&stdnumber, sizeof(int));
for (int i = 0; i < stdnumber; i++)
{
fdata.read((char*)&len, sizeof(int));
fdata.read((char*)&t_std.t_name, len);
fdata.read((char*)&len, sizeof(int));
fdata.read((char*)&t_std.t_id, sizeof(int));
fdata.read((char*)&len, sizeof(int));
fdata.read((char*)&t_std.t_sex, sizeof(int));
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));
if (head == NULL)
{
head = new Student;
head->SetData(t_std);
phead = head;
head = head->next;
}
else
{
head = new Student;
head->SetData(t_std);
head = head->next;
}
}
head = phead;
return true;
}
我尝试用另一种方法去写,但是这次是连读取文件都无效了,看看上面注释的部分,是不是我写的代码又出错了,我看了一下根目录,确实存在该文件,并且,我计算了一下,字节数也是正确的,为什么会这样,我为了这个文件的问题,已经用了3天的时间了,改了还几次代码,到今天还没有解决啊