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);
    }
  • 相关阅读:
    【Forza Horizon 5】频繁断网解决办法
    【Java】java.util.ConcurrentModificationException
    【MySQL】下发功能SQL
    【MybatisPlus】 Field '主键' doesn't have a default value
    【SpringBoot】数据源加密处理
    【VMware】将NAT虚拟机开放访问
    TreeView绑定数据库收藏
    存储过程概述
    asp.net页面直接输出纯xml
    如何保证远程登录服务器安全
  • 原文地址:https://www.cnblogs.com/duyy/p/3786165.html
Copyright © 2011-2022 走看看