zoukankan      html  css  js  c++  java
  • MFC 文件I/O和串行化

    1.枚举所有文件夹(递归)

    void EnumerateFolders ()
    {
        WIN32_FIND_DATA fd;
        HANDLE hFind = ::FindFirstFile (_T ("*.*"), &fd);
    
        if (hFind != INVALID_HANDLE_VALUE) {
            do {
                if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                    CString name = fd.cFileName;
                    if (name != _T (".") && name != _T ("..")) {
                        TRACE (_T ("%s
    "), fd.cFileName);
                        ::SetCurrentDirectory (fd.cFileName);
                        EnumerateFolders ();
                        ::SetCurrentDirectory (_T (".."));
                    }
                }
            } while (::FindNextFile (hFind, &fd));
            ::FindClose (hFind);
        }
    }
    //比如说枚举E:svn文件夹,不过可能会导致栈溢出
    ::SetCurrentDirectory(_T("e:\svn"));
    EnumerateFolders();

     2.串行化类(版本控制http://www.vckbase.com/index.php/wv/1097

    class MyLine:public CObject
    {
        DECLARE_SERIAL(MyLine);
    public:
        MyLine(){};
        MyLine(CPoint from,CPoint to){
            m_ptFrom=from;
            m_ptTo=to;
        }
        void Serialize(CArchive &ar);
    protected:
        CPoint m_ptFrom;
        CPoint m_ptTo;
    };
    
    IMPLEMENT_SERIAL(MyLine,CObject,1);
    void MyLine::Serialize(CArchive &ar){
        
        if(ar.IsLoading()){
            ar<<m_ptFrom<<m_ptTo;
        }else{
            ar>>m_ptFrom>>m_ptTo;
        }
    }

     下面是串行化输入输出demo:

    void CMainWindow::OnFileWrite()
    {
        // TODO: 在此添加命令处理程序代码
        CFile file(_T("abc.txt"),CFile::modeCreate|CFile::modeWrite);
        CArchive ar(&file,CArchive::store);
        int i=10;
        float f=1.3f;
        char ch='c';
        CString str=_T("abc");
        ar<<i<<f<<ch<<str;
    }
    
    
    void CMainWindow::OnFileRead()
    {
        // TODO: 在此添加命令处理程序代码
        CFile file(_T("abc.txt"),CFile::modeRead);
        CArchive ar(&file,CArchive::load);
        int i;
        float f;
        char ch;
        CString str;
        CString strResult;
        ar>>i>>f>>ch>>str;   //必须按顺序输出,也就是说存入的数据保持着原有的类型
        strResult.Format(_T("%d,%f,%c,%s"),i,f,ch,str);
        AfxMessageBox(strResult);
    }
  • 相关阅读:
    Coding.net进阶,使用Git管理代码
    经典算法问题
    浅谈三款常用软件
    Coding.net简单使用指南
    湖北宜化总结
    天顺风能经验总结
    Vue中watch的高级用法
    html 锚点三种实现方法
    【机器学习】EM算法详细推导和讲解
    【机器学习】BP神经网络实现手写数字识别
  • 原文地址:https://www.cnblogs.com/duyy/p/3786165.html
Copyright © 2011-2022 走看看