MFC中有三种文件操作的类 CFile ,CArchive,CDocument
来源:互联网 发布:韩顺平java全套视频 编辑:程序博客网 时间:2024/05/21 11:09
MFC中有三种文件操作的类,他们分别为
- CFile
- CArchive
- CDocument
下面分别对每个进行使用说明
(1)CFile在使用的时候比较麻烦,一般需要先定义一个结构体,然后对其每个结构体进行存储,存储实例代码如下:
void CTest1Dlg::OnSave()
{
static char szFilter[] = “Chart Files (.xlc)|.xlc|Worksheet Files (.xls)|.xls|Data Files (.xlc;.xls)|.xlc; .xls|All Files (.)|.||”;
CFileDialog fd(FALSE,”.txt”,”未命名”,OFN_OVERWRITEPROMPT);
if( IDCANCEL == fd.DoModal() )
{
return;
}
CString szPath = fd.GetPathName();
CFile file;
if( !file.Open(szPath,CFile::modeCreate|CFile::modeWrite,NULL))
{
AfxMessageBox(“文件打开失败!”);
return ;
}
int nCount = m_listCtrl.GetItemCount();
int i = 0;
INFO info;
while( i < nCount )
{
info.nNum = atoi(m_listCtrl.GetItemText(i,0));
strcpy(info.szName,m_listCtrl.GetItemText(i,1));
info.dSal = atof(m_listCtrl.GetItemText(i,2));
file.Write(&info,sizeof(info));
i++;
}
}
打开文件如下:
void CTest1Dlg::OnOpen()
{
CFileDialog fd(TRUE);
if( IDCANCEL == fd.DoModal() )
{
return;
}
CString szPath = fd.GetPathName();
CFile file;
if( !file.Open(szPath,CFile::modeRead,NULL))
{
AfxMessageBox(“文件打开失败!”);
return ;
}
m_listCtrl.DeleteAllItems();
int i = 0;
CString str;
while( sizeof(info) == file.Read(&info,sizeof(info)) )
{
str.Format(“%d”,info.nNum);
m_listCtrl.InsertItem(i,str);
m_listCtrl.SetItemText(i,1,info.szName);
str.Format(“%lf”,info.dSal);
m_listCtrl.SetItemText(i,2,str);
i++;
}
}
(2)CArchive类没有在MSDN中的类表中,不是CObject类的派生类,所以,即没有基类,但是相对于CFile 文件操作简单了少许其特点在于:
- 不需要使用 固定大小的结构体对象作为存储单元进行存取
- 数组存储无冗余,很紧凑,生成的文件大小是所有变量大小和字符串长度的和
- 其使用>> << 重载运算符写和读操作,甚是灵活
其保存实例如下:
void CTest1Dlg::OnSave()
{
static char szFilter[] = “Chart Files (.xlc)|.xlc|Worksheet Files (.xls)|.xls|Data Files (.xlc;.xls)|.xlc; .xls|All Files (.)|.||”;
CFileDialog fd(FALSE,”.txt”,”未命名”,OFN_OVERWRITEPROMPT);
if( IDCANCEL == fd.DoModal() )
{
return;
}
CString szPath = fd.GetPathName();
CFile file;
if( !file.Open(szPath,CFile::modeCreate|CFile::modeWrite,NULL))
{
AfxMessageBox(“文件打开失败!”);
return ;
}
CArchive ca(&file,CArchive::store);
int nCount = m_listCtrl.GetItemCount();
int i = 0;
ca << nCount;
while( i < nCount )
{
ca << atoi(m_listCtrl.GetItemText(i,0));
ca << m_listCtrl.GetItemText(i,1);
ca << atof(m_listCtrl.GetItemText(i,2));
i++;
}
}
打开文件实例如下:
void CTest1Dlg::OnOpen()
{
CFileDialog fd(TRUE);
if( IDCANCEL == fd.DoModal() )
{
return;
}
CString szPath = fd.GetPathName();
m_doc.OnOpenDocument(szPath);
CFile file;
if( !file.Open(szPath,CFile::modeRead,NULL))
{
AfxMessageBox(“文件打开失败!”);
return ;
}
m_listCtrl.DeleteAllItems();
int i = 0,nCount;
CString str;
CArchive ca(&file,CArchive::load);
int num;CString szName;double dSal;
ca >> nCount;
while( i< nCount )
{
ca >> num;
str.Format(“%d”,num);
m_listCtrl.InsertItem(i,str);
ca >> szName;
m_listCtrl.SetItemText(i,1,szName);
ca >> dSal;
str.Format(“%f”,dSal);
m_listCtrl.SetItemText(i,2,str);
i++;
}
}
(3)CDovument类更是简化了上述操作,支持标准操作,如创建、装载、保存等。框架用CDocument定义的界面来操作文档,其封装Serialize(CArchive &ca)函数进行文件的读写操作,实例读文件操作:
void CTest1Dlg::OnOpen()
{
CFileDialog fd(TRUE);
if( IDCANCEL == fd.DoModal() )
{
return;
}
CString szPath = fd.GetPathName();
m_listCtrl.DeleteAllItems();
m_doc.OnOpenDocument(szPath);
}
保存文件操作:
void CTest1Dlg::OnSave()
{
static char szFilter[] = “Chart Files (.xlc)|.xlc|Worksheet Files (.xls)|.xls|Data Files (.xlc;.xls)|.xlc; .xls|All Files (.)|.||”;
CFileDialog fd(FALSE,”.txt”,”未命名”,OFN_OVERWRITEPROMPT);
if( IDCANCEL == fd.DoModal() )
{
return;
}
CString szPath = fd.GetPathName();
m_doc.OnSaveDocument(szPath);
}
然后调用Serialize(CArchive &ca)函数进行撒谎书类似CArchive类的操作
好了,这就是上述三种类的简单介绍,
阅读全文
0 0
- MFC中有三种文件操作的类 CFile ,CArchive,CDocument
- 使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作
- MFC文件的读写操作,类的序列化与反序列化,CFile,CFileDialog,CArchive,CStdioFile
- 使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作演示案例
- MFC的文件操作 CFile类
- MFC CFile类操作文件的方法
- MFC文件操作(CFile)
- MFC文件操作(CFile)
- 【MFC】CFile操作文件
- MFC的文件类CFile
- MFC的文件类CFile
- MFC文件操作之CArchive
- MFC中Cfile类操作文件的方法
- MFC的CFILE类文件操作--例子说明
- 【MFC对文件操作的支持】CFile 类
- MFC文件操作的另一个思路CFile
- 使用CFile,CArchive,CStdioFile,fstream进行文件操作
- MFC的CArchive类
- JAVA 反射机制(Java Reflection)总结(二)
- hdu 5976 Detachment(乘法逆元)(附测试用例)
- 关于The user specified as a definer ('root'@'%') does not exist 解决方法
- block与inline 元素
- hdu 1124 圆桌会议
- MFC中有三种文件操作的类 CFile ,CArchive,CDocument
- 【Angular2】插值表达式如何嵌套显示
- 基础算法(二分,去重,排列)
- 后台管理布局之模板继承2 补充 继承拼接
- Arctic Network POJ
- Python 变量类型
- Java多线程之线程安全与异步执行
- 卷积神经网络中十大拍案叫绝的操作
- Anaconda