在VC中,我想保存一些变量到文档中,一个个写入太麻烦,可不可以把这些变量设置成类或者结构体一起保存,下次读取时在赋给这个结构体成员,最好有代码,解决马上结贴!高结贴率!
解决方案 »
- 收到两次KeyDown消息
- 这个if语句在这里是做什么用的,这个函数是如何设置内存设备环境和位图的啊
- 在系统启动到桌面之前,屏幕上添加图标那是怎么做的
- 原来google自已的chrome浏览器,竟然用的是苹果公司开发的内核呀!
- 关于数字滤波的问题
- 向各位高手请教iostream的格式问题,谢谢!
- NetMessageBufferSend和WinExec问题!
- 请问在Windows2000下如何获得网卡地址(6字节的MAC地址)
- 如何截获另一窗口的鼠标消息并作出响应
- 请教高手,如何在其他应用程序的windows窗口的标题栏上增加一个小图标(或画一个小图形),在鼠标点击它时,出现下拉式菜单,需要用钩子吗。
- 请问如何获取列表框的默认高度
- _variant_t 转换为CString时,在结束程序时,总是报内存泄露
SomeStruct s;
// 写的时候
file.Write(&s, sizeof(s));
//读的时候
file.Read(&s, sizeof(s));
这是我的一个打印程序中的部分代码 struct Rule
{
CPoint point;
char text[100];
}rule;
int i=0;
if(!file.Open(pszFileName,CFile::typeBinary|CFile::modeRead),&fileException)
{
//文件操作代码
file.SeekToBegin();
// DWORD pos = file.GetPosition();
while (file.Read((char*)&rule,sizeof(rule)))
{
dc.StartPage();
dc.TextOut(200,60+i*80,str[++i]);
dc.TextOut(rule.point.x,rule.point.y,rule.text);
dc.EndPage();
}
file.Close();
}
char* pszFileName ="record.txt";
CStdioFile file;
CFileException fileException;
if(!file.Open(pszFileName,CFile::typeBinary|CFile.modeCreate|CFile::modeWrite),&fileException)
{
//文件操作代码
for (int i =1;i<7;i++)
{
rule.point.x = 20*i;
rule.point.y = 20*i;
sprintf(rule.text,"%d",i);
//rule.text.Format("%d",i);
file.Write((char*)&rule,sizeof(rule));
}
file.Close();
}
{
MyTest mytest;
mytest.iMyOld = 10;
mytest.strMyName = "dshdkahdks";
CString strDefFileName = COleDateTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"));
CFileDialog dlg(FALSE, _T("txt"), strDefFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("txt Files(*.txt)|*.txt|All Files(*.*)|*.*||"));
if (IDOK == dlg.DoModal())
{
CString strFileName = dlg.GetPathName();
//char* pszFileName ="record.txt";
CFile file;
CFileException fileException;
if(!file.Open(strFileName,CFile::typeBinary|CFile.modeCreate|CFile::modeWrite),&fileException)
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}
}
}为什么我没有写进去呢?
然后你单步执行下看看文件是否打开成功了。打开成功了的话
file.Write((void*)&mytest,sizeof(mytest));这样看看有效果么?
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}
再仔细看看你的代码
if(!file.Open(strFileName,CFile::typeBinary|CFile.modeCreate|CFile::modeWrite),&fileException)
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}
}
判断它是否打开成功,成功了才写,不成功当然就写不进去了啊。
{
CString strFileName;
MyTest mytest;
mytest.iMyOld = 10;
mytest.strMyName = "liqiu";
CString strDefFileName = COleDateTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"));
CFileDialog dlg(FALSE, _T("txt"), strDefFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("txt Files(*.txt)|*.txt|All Files(*.*)|*.*||"));
if (IDOK == dlg.DoModal())
{
strFileName = dlg.GetPathName();
} CFile file;
if(!file.Open(strFileName, CFile::modeRead))
{
return;
}
else
{
file.Write((MyTest*)&mytest,sizeof(mytest));
}
file.Close();}如果新建一个txt直接return了
在原有上保存,运行时又出错。
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}
else
{
SECURITY_ATTRIBUTES attribute;
attribute.nLength = sizeof(attribute);
attribute.lpSecurityDescriptor = NULL;
attribute.bInheritHandle = FALSE;
if(CreateDirectoryA(strFileName,&attribute) == 0)
{
AfxMessageBox("false");
}
else
{
if(!file.Open (strFileName,CFile::typeBinary|CFile.modeCreate|CFile::modeWrite),&fileException)
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}//endif }//endif
}//endif
{
return;//打开成功这里就不能return了,你应该弹出一个“请选择你要保存的路径”选择完了创建这个路径文件然后再打开文件写内容;
}
else
{
file.Write((MyTest*)&mytest,sizeof(mytest));//这里应该也是创建文件,实现写内容保存功能
}
file.Close();
您能帮我写一个例子么,就简单把一个结构体的内容写入文本就行,我会另外开一个给你分的。
能不能仔细看看自己写的代码,if(!file.Open...到底是成功了还是没成功??!!
struct MyTest
{
CString strMyName;
int iMyOld;
};
只要能把上面的结构体实现保存,另存(有另存为对话框),打开(以保存的结构体)的文档的程序代码,另开贴百分相送,高结贴率决不食言!
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}
这段代码实在很强大
哦,刚接触VC,以前都用的C#
我就想实现一个字符串,用char也行,只要能实现上述三功能,绝对开贴给分,麻烦大家了,很急!谢谢!
void CMytestDlg::OnBnClickedOk()
{
MyTest mytest;
mytest.iMyOld = 10;
memcpy(&mytest.strMyName, _T("fdsfsf"), sizeof(_T("fdsfsf"))); CString strDefFileName = COleDateTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"));
CFileDialog dlg(FALSE, _T("txt"), strDefFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("txt Files(*.txt)|*.txt|All Files(*.*)|*.*||"));
if (IDOK == dlg.DoModal())
{
CString strFileName = dlg.GetPathName();
//char* pszFileName ="record.txt";
CFile file;
CFileException fileException;
if(file.Open(strFileName,CFile::typeBinary|CFile.modeCreate|CFile::modeWrite),&fileException)
{
//文件操作代码
file.Write(&mytest,sizeof(mytest));
file.Close();
}
}
}文档中输出的是:
f d s f s f 烫烫烫烫烫烫烫烫烫烫烫烫烫
struct MyTest
{
TCHAR strMyName[20];
int iMyOld;
};
struct MyTest
{
CString txt;
int intval;
};void Save()
{
CFile file("sjorh.txt", CFile::modeCreate|CFile::modeWrite);
CArchive saveArchive(&file, CArchive::store); MyTest test1;
test1.txt = "sgesjshs";
test1.intval = 2; saveArchive<<test1.txt<<test1.intval; saveArchive.Close();
file.Close();
}void Read()
{
CFile file("sjorh.txt", CFile::modeRead);
CArchive saveArchive(&file, CArchive::load); MyTest test1; saveArchive>>test1.txt>>test1.intval; saveArchive.Close();
file.Close();
}
CString strDefFileName = COleDateTime::GetCurrentTime().Format(_T("%Y%m%d%H%M%S"));
CFileDialog dlg(FALSE, _T("txt"), strDefFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("txt Files(*.txt)|*.txt|All Files(*.*)|*.*||"));
if (IDOK == dlg.DoModal())
{
CString strFileName = dlg.GetPathName();
//char* pszFileName ="record.txt";
CFile file;
CFileException fileException;
if(!file.Open(strFileName,CFile::typeBinary|CFile.modeCreate|CFile::modeWrite),&fileException)
{
//文件操作代码
file.Write(b,b.GetLength());
file.Close();
} }
我这样写进去就没有乱码。
改成
_tcscpy(mytest.strMyName, _T("fdsfsf"));当然,即使这样写出的文件,你可以用相同的方法从文件里读出来,但如果直接用记事本之类的东西打开看的话,因为既然TCHAR strMyName[20],那么你写到文件里的一定是20个TCHAR,字符串截止符后面的东西当然就是乱码。
可能有字符串,整型数或double型的
CFile cf;
int =10;
cf.Write(&a,sizeof(int));//int 型。
这样写进去。