先看一下效果图
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();
MFC CArchive实现保存到二进制文件,码迷,mamicode.com
时间: 2024-11-05 21:43:35