程度没有什么问题,只用把fstream is("student",ios::binary);这个修改为ofstream is("student",ios::binary);就可以了。
没想到这200分会被我赚到!
把
fstream is("student",ios::binary);
改成
ofstream is("student",ios::binary);
就能写入了。
下面是我在2005上给你实现的代码:
=========================================
include
......
using namespace std;
struct student
{
char a1[4];
char a2[4];
char a3[4];
char a4[4];
char a5[4];
}st1,st2;
void CmfcwriteDlg::OnBnClickedButton1()
{
memcpy(st1.a1 ,"jac",sizeof(4));
memcpy(st1.a2 ,"ja1",sizeof(4));
memcpy(st1.a3 ,"ja2",sizeof(4));
memcpy(st1.a4 ,"ja3",sizeof(4));
memcpy(st1.a5 ,"ja4",sizeof(4));
ofstream os("students");
os.write ((char*)&st1,sizeof(student));
os.close ();
//下面是读取的方法,赠送的
ifstream is("students");
is.read ((char*)&st2,sizeof(student));
is.close ();
::MessageBoxA (NULL,st2.a1,"A",MB_OK);
}
你的fstream对象的参数设置不对,你的第二个参数默认是打开方式的一种,怎么能够写入呢?你可以换成 fstream is("student",ios::binary||ios::out);详细的用法可以去网上搜索一下。
还有就是那个write函数的第一个参数,由于你要写入的是一个结构体,而参数要求是一个字符指针,虽然你做了强制转换,但是在写入的时候可能会出现数据丢失,建议使用循环,对结构体的成员分别写入。
不会写不进去的啊,是不是你写的东西太小了,还在缓存中??如果是这样的话,你最好在写完文件为关闭之前,把缓存强行Flush一下!
或者是你写到其他地方去了而自己还在工程目录里面找文件,所以没有找到
那就别用结构体 用那个CSstdioFile和CFile试试 感觉那样比较简单。
fstream is("student",ios::binary);错啦
改成ofstream is("student",ios::binary);
就OK啦