cocos2dx-2.x CCFileUtils文件管理类分析(3)

cocos2dx-2.x CCFileUtils文件管理类分析(3),第1张

概述在2中,我们分析了几个函数,在这一篇中我们继续分析其他一些函数。1、在2中,多次用到了m_searchPathArray(搜索路径),那这个搜索路径怎么来的呢?我们可以通过setSearchPaths这个函数来设置搜索路径void CCFileUtils::setSearchPaths(const std::vector<std::string>& searchPaths){ b
在2中,我们分析了几个函数,在这一篇中我们继续分析其他一些函数。1、在2中,多次用到了m_searchPathArray(搜索路径),那这个搜索路径怎么来的呢?我们可以通过setSearchPaths这个函数来设置搜索路径voID CCfileUtils::setSearchPaths(const std::vector<std::string>& searchPaths){    bool bExistDefaultRootPath = false;    //先把以前的清空,包括缓存路径    m_fullPathCache.clear();    m_searchPathArray.clear();     //逐个加入到m_searchPathArray    for (std::vector<std::string>::const_iterator iter = searchPaths.begin(); iter != searchPaths.end(); ++iter)    {        std::string strPrefix;        std::string path;	//如果不是绝对路径,androID的则加上"assets/"前缀,表明需要去安装包里找        if (!isabsolutePath(*iter))        { // Not an absolute path            strPrefix = m_strDefaultResRootPath;        }	//如果路径不是以'/'结尾,则在结尾加上'/'        path = strPrefix+(*iter);        if (path.length() > 0 && path[path.length()-1] != '/')        {            path += "/";        }        if (!bExistDefaultRootPath && path == m_strDefaultResRootPath)        {            bExistDefaultRootPath = true;        }        m_searchPathArray.push_back(path);    }        if (!bExistDefaultRootPath)    {        //如果m_strDefaultResRootPath默认路径不在m_searchPathArray,则加入进来        //cclOG("Default root path doesn't exist,adding it.");        m_searchPathArray.push_back(m_strDefaultResRootPath);    }}-->>voID CCfileUtils::addSearchPath(const char* path_){    std::string strPrefix;    std::string path(path_);    if (!isabsolutePath(path))    { // Not an absolute path        strPrefix = m_strDefaultResRootPath;    }    path = strPrefix + path;    if (path.length() > 0 && path[path.length()-1] != '/')    {        path += "/";    }    m_searchPathArray.push_back(path);}//移除一个搜索路径:voID CCfileUtils::removeSearchPath(const char *path_){	std::string strPrefix;	std::string path(path_);	if (!isabsolutePath(path))	{ // Not an absolute path		strPrefix = m_strDefaultResRootPath;	}	path = strPrefix + path;	if (path.length() > 0 && path[path.length()-1] != '/')	{		path += "/";	}	std::vector<std::string>::iterator iter = std::find(m_searchPathArray.begin(),m_searchPathArray.end(),path);	m_searchPathArray.erase(iter);}//移除全部voID CCfileUtils::removeAllPaths(){	m_searchPathArray.clear();}2、m_searchResolutionsOrderArray资源路径和上面的一样处理方式,就不说了。3、从pszrelativefile这个文件的相对路径中,得到pszfilename文件的全路径,其实就是找到pszrelativefile文件的最后一个'/',然后去这个'/'前的所有字符 + pszfilename即可。const char* CCfileUtils::fullPathFromrelativefile(const char *pszfilename,const char *pszrelativefile){    std::string relativefile = pszrelativefile;    CCString *pRet = CCString::create("");    pRet->m_sstring = relativefile.substr(0,relativefile.rfind('/')+1);    pRet->m_sstring += getNewfilename(pszfilename);    return pRet->getCString();}4、//androID下的可读写路径string CCfileUtilsAndroID::getWritablePath(){    // Fix for Nexus 10 (AndroID 4.2 multi-user environment)    // the path is retrIEved through Java Context.getCacheDir() method    string dir("");    //pContext.getfilesDir().getabsolutePath() java端    string tmp = getfileDirectoryJNI(); //pContext.getfilesDir().getabsolutePath()    if (tmp.length() > 0)    {        dir.append(tmp).append("/");        return dir;    }    else    {        return "";    }}
总结

以上是内存溢出为你收集整理的cocos2dx-2.x CCFileUtils文件管理类分析(3)全部内容,希望文章能够帮你解决cocos2dx-2.x CCFileUtils文件管理类分析(3)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052773.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存