首页 > 代码库 > MFC CArchive实现保存到二进制文件

MFC CArchive实现保存到二进制文件

先看一下效果图

 

 1 BOOL Save2File()
 2 {
 3     BOOL bOpenFileDialog = FALSE;  ---------------------------------- 4     BOOL bVistaStyle = FALSE;                   // no VistaStyle
 5     TCHAR BASED_CODE szFilter[] =    -------------------------------- 6         _T("二进制文件(*.dat)|*.dat|")
 7         _T("All Files (*.*)|*.*||");
 8     CString path_and_fileName;
 9 
10     CFileDialog fdlg(bOpenFileDialog, _T("dat"), _T("*.dat"), -------11             OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL, 0,
12             bVistaStyle);
13     if (IDOK == fdlg.DoModal()) {
14         CFile fileSave;
15         CFileException ex;
16 
17         path_and_fileName = fdlg.GetPathName();
18         if (!fileSave.Open(path_and_fileName, CFile::modeCreate | 
19                 CFile::modeWrite | CFile::typeBinary, &ex)) {    ------20             TCHAR szError[1024];
21             ex.GetErrorMessage(szError, 1024);
22             MessageBox(NULL, szError, _T("提示"), MB_OK);
23             return FALSE;
24         }
25         CArchive ar(&fileSave, CArchive::store); ---------------------26         for (int i=0;i<BUFF_LENGTH;i++) {
27             ar<<dataBuf[i]; ------------------------------------------28         }
29         ar.Close();
30         fileSave.Close();
31     }
32   
33     return TRUE;
34 }

 

①bOpenFileDialog为FALSE,弹出对话框为File save as,若为TRUE,弹出对话框为File Open;

②文件类型过滤字符串,这个仅仅是在保存的文件类型里面可选的内容,文件过滤要在第③项里面设置;

 

③_T("dat"), _T("*.dat")这两个字符串设置文件过滤类型跟默认文件名,这个过滤是在选择的时候只显示过滤的文件。

④CFile::typeBinary设置允许二进制方式打开文件;

根据打开的文件创建串行化对象,将ar与fileSave关联,并设置CArchive::store

⑥直接写入ar就是二进制方式对文件的写入ar<<dataBuf[i],之后注意关闭:

    ar.Close();

    fileSave.Close();