zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    Android 常见工具类封装
    Android Logcat 封装类
    Android 四大组件之 " Activity "
    "浅谈Android"第一篇:Android系统简介
    罗列的书单
    关于多层架构一些思考
    LeetCode 330. Patching Array
    LeetCode 315. Count of Smaller Numbers After Self(线段树,树状数组)
    LeetCode 316. Remove Duplicate Letters(贪心)
    LeetCode 327. Count of Range Sum(线段树)
  • 原文地址:https://www.cnblogs.com/quantumplan/p/3702061.html
Copyright © 2011-2022 走看看