VC++开发GIS系统(79)新建点文件之文件模块代码实现

前文《VC++开发GIS系统(78)新建点文件之导出新建点文件对话框》中导出了新建点文件的对话框,并且获取了文件名。本文将继续前文的工作,实现文件模块的操作。

_malaIO.h

在CProjectIO类中增加下面3个函数:

bool newPointFile(vector<malaTree>&paraTree, CString pointFileName);//新建点文件
bool writeAllNode(vector<malaTree>&paraTree);//更新整个节点树
bool writeHeader(CString fPath,CString fHeader);//写入文件头

_malaIO.cpp

上面的函数实现如下:

//新建点文件
bool CProjectIO::newPointFile(vector<malaTree>&paraTree, CString pointFileName)
{
    if (writeAllNode(paraTree))
    {
        if (writeHeader(pointFileName, L"mpt"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

这个函数的作用是新建点文件,主要调用了writeAllNode和writeHeader两个函数。实现如下:

//更新整个节点树
bool CProjectIO::writeAllNode(vector<malaTree>&paraTree)
{
    if (paraTree.size()>0)
    {
        CFile file;
        file.Open(LPCTSTR(mPrjPath), CFile::modeCreate | CFile::modeWrite);
        CArchive ar(&file, CArchive::store);
        //ar << pNode.itemnode << pNode.isOpen << pNode.isActive << pNode.filePath << pNode.fileType;
        for (int i = 0; i < paraTree.size(); i++)
        {
            try
            {
                malaTree pNode = paraTree[i];
                ar << pNode.itemnode << pNode.isOpen << pNode.isActive << pNode.filePath << pNode.fileType;
            }
            catch (CException* e)
            {
                return false;
            }
        }
        ar.Close();
        file.Close();
        return true;    
    }
    else
    {
        return false;
    }
    
}

这个函数的作用是将传入的vector&paraTree,也就是目录树写入文件,这里没用使用替换的写入方法,为了简便,直接覆盖写入整个目录树,以实现更新的目的。

//写入文件头
bool CProjectIO::writeHeader(CString fPath, CString fHeader)
{
    CFile file;
    file.Open(LPCTSTR(fPath), CFile::modeCreate | CFile::modeWrite);
    CArchive ar(&file, CArchive::store);
    try
    {
        ar << fHeader;
    }
    catch (CException* e)
    {
        return false;
    }
    ar.Close();
    file.Close();
    return true;
}

这个函数的作用是写一个简单的文件头,主要用来打开文件的时候,判断文件的类型。

详细代码可以参考:GitHub

VC++开发GIS系统(78)新建点文件之导出新建点文件对话框 VC++开发GIS系统(80)新建点文件

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

发表评论