windows_文件序列化与反序列化

/*
序列化:将图形以文件的形式保存起来
*/
void CGragh::SetGraghToFile(CString strFileName)
{
    FILE* pFile = _tfopen(strFileName.GetBuffer(0), _T("w+b"));
    if(NULL==pFile) return;
    int nCount = vecBihua.size();
    fwrite((void*)&nCount, sizeof(int), sizeof(int), pFile);
    for(int i=0; i<nCount; i++)
    {
        BIHUA bihua = vecBihua.at(i);
        int nPtCount = bihua.size();
        fwrite((void*)&nPtCount, sizeof(int), sizeof(int), pFile);
        if(nPtCount>0)
        {
            for(int j=0; j<nPtCount; j++)
            {
                CPoint ptMove = bihua.at(j);
                fwrite((void*)&ptMove.x, sizeof(ptMove.x), sizeof(ptMove.x), pFile);
                fwrite((void*)&ptMove.y, sizeof(ptMove.y), sizeof(ptMove.y), pFile);
            }
        }
    }
    fclose(pFile);
}

/************************************************************************/
/* 反序列化:从文件里面读出内容到内存中绘制                             */
/************************************************************************/
void CGragh::GetGraghFromFile(CString strFileName)
{
    vecBihua.clear();

    FILE* pFile = _tfopen(strFileName.GetBuffer(0), _T("rb"));
    if(NULL==pFile) return;
    int nCount = 0;
    fread((void*)&nCount, sizeof(int), sizeof(int), pFile);
    for(int i=0; i<nCount; i++)
    {
        BIHUA bihua;
        int nPtCount = 0;
        fread((void*)&nPtCount, sizeof(int), sizeof(int), pFile);
        if(nPtCount>0)
        {
            for(int j=0; j<nPtCount; j++)
            {
                CPoint ptMove;
                fread((void*)&ptMove.x, sizeof(ptMove.x),sizeof(ptMove.x), pFile);
                fread((void*)&ptMove.y, sizeof(ptMove.y),sizeof(ptMove.y), pFile);
                bihua.push_back(ptMove);
            }
        }
        AddBihua(bihua);
    }
    fclose(pFile);
}

 

posted @ 2013-08-18 14:18  宝贝,我永远都在  阅读(275)  评论(0)    收藏  举报