【87H源码】【全景展示网站源码】【收录好的源码】cocos2d android源码

2025-01-13 21:28:17 来源:wcf 聊天源码 分类:知识

1.cocos2d-x判断文件是否存在for android

cocos2d android源码

cocos2d-x判断文件是否存在for android

       最近在做一款cocos2d-x的游戏,想用access去判断文件是否存在,在windows和ios平台完全ok,但是87H源码android怎么都不可以。后来发现,原来anroid的资源文件都还在apk中未解压出来,cocos2d-x针对android时这样读取文件的: 1 unsigned char* CCFileUtils::getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize) 2 { 3 unsigned char * pData = 0; 4 string fullPath(pszFileName); 5 6 if ((! pszFileName) || (! pszMode)) 7 { 8 return 0; 9 } if (!m_obPreloadDirectory.empty()) { do { std::string filename = pszFileName; size_t pos = filename.rfind("/"); if (pos != std::string::npos) filename = filename.substr(pos + 1); filename = m_obPreloadDirectory + filename; FILE *fp = fopen(filename.c_str(), pszMode); CC_BREAK_IF(!fp); unsigned long size; fseek(fp,0,SEEK_END); size = ftell(fp); fseek(fp,0,SEEK_SET); pData = new unsigned char[size]; size = fread(pData,sizeof(unsigned char), size,fp); fclose(fp); if (pSize) { *pSize = size; } if (pData != NULL) return pData; } while (0); } if (pszFileName[0] != '/') { // read from apk string pathWithoutDirectory = fullPath; fullPath.insert(0, m_obDirectory.c_str()); fullPath.insert(0, "assets/"); pData = CCFileUtils::getFileDataFromZip(s_strResourcePath.c_str(), fullPath.c_str(), pSize); if (! pData && m_obDirectory.size() > 0) { // search from root pathWithoutDirectory.insert(0, "assets/"); pData = CCFileUtils::getFileDataFromZip(s_strResourcePath.c_str(), pathWithoutDirectory.c_str(), pSize); } } else { do { // read rrom other path than user set it FILE *fp = fopen(pszFileName, pszMode); CC_BREAK_IF(!fp); unsigned long size; fseek(fp,0,SEEK_END); size = ftell(fp); fseek(fp,0,SEEK_SET); pData = new unsigned char[size]; size = fread(pData,sizeof(unsigned char), size,fp); fclose(fp); if (pSize) { *pSize = size; } } while (0); } /*if (! pData && isPopupNotify()) { std::string title = "Notification"; std::string msg = "Get data from file("; msg.append(fullPath.c_str()).append(") failed!"); CCMessageBox(msg.c_str(), title.c_str()); }*/ return pData; }这个方法在cocos2d-x源码platform/android的CCFileUtils类中,我们可以看到pData = CCFileUtils::getFileDataFromZip(s_strResourcePath.c_str(), pathWithoutDirectory.c_str(), pSize)这样一段代码,其实它是直接去获取apk包里面的资源,所以你access就行不通了。有两种方式可以解决这个问题:1、全景展示网站源码直接判断CCFileUtils::getFileData返回值是否为NULL,不过这个方式有一个问题,当你同一个页面判断的资源很多的话,这个是很耗时的,因为它每次判断都要去解压打包,收录好的源码这种方式只适合判断少量文件,最好是单个文件是否存在。2、将apk中的资源文件单独拷贝出来放到一个单独的文件夹下,比如/data/data/apkPackage/,app 农场游戏 源码当然拷贝也是很耗时的,通常这一步放到程序启动的时候处理,如同加载资源一样,这样做以后,可以直接判断这个文件夹里面是asp折叠收回源码不是存在这个文件,对于同一个页面判断多个资源,是相当快的。接下来讲一下第二种方式的具体作法:在CCFileUtils类中添加两个方法: 1 bool CCFileUtils::isFileExist(const char* pFileName) 2 { 3 if( !pFileName ) return false; 4 //strFilePathName is :/data/data/ + package name 5 std::string filePath = m_obPreloadDirectory + pFileName; 6 7 FILE *fp = fopen(filePath.c_str(),"r"); 8 if(fp) 9 { fclose(fp); return true; } return false; } void CCFileUtils::copyData(const char* pFileName) { std::string strPath = fullPathFromRelativePath(pFileName); unsigned long len = 0; unsigned char *data = NULL; data = getFileData(strPath.c_str(),"r",&len); if(data==NULL) return; std::string destPath = m_obPreloadDirectory; destPath += pFileName; FILE *fp = fopen(destPath.c_str(),"w+"); fwrite(data,sizeof(char),len,fp); fclose(fp); delete []data; data = NULL; }isFileExist可以用来判断文件是否存在,copyData就是将apk中的资源文件拷贝到另外一个目录,当然你可以选取你需要的资源进行拷贝,因为拷贝也是一项耗时的操作。这两个方法里面都有一个私有成员m_obPreloadDirectory,这其实就是你想把文件拷贝到哪里的目录,很简单,给它一个set方法,外界设置一下这个目录就可以了,一般情况都设为/data/data/packagename。在拷贝资源前先通过isFileExist判断一下文件是否存在,存在就不需要再拷贝了,因为刚才说过拷贝很耗时。接下来就可以通过isFileExist方法来判断文件是否存在了。(在不断的尝试中总结经验,以帮助后面的人更快的上路)

更多资讯请点击:知识

热门资讯

mobsf源码分析

2025-01-13 20:272446人浏览

修正溯源码_修正编码

2025-01-13 20:21899人浏览

店伙伴源码_店铺伙伴是什么意思

2025-01-13 20:182181人浏览

cancel源码解析

2025-01-13 18:481470人浏览

推荐资讯

“我们把每一次都当作第一次,然后重复了两千次”

2022年6月21日下午,南方周末举办了“周末故事会”暨报纸2000期特别活动。 活动主办方供图/图)“冰墩墩”广美设计团队总执行刘平云经常遇到别人询问,你们团队14个人,花了将近一年的时间,才做出了

淘宝 ios源码_淘宝app源码

1.淘宝客APP如何生成ios系?2.在淘宝上买ios的app靠谱吗?淘宝客APP如何生成ios系? 淘客若欲创建iOS应用,操作方法与创建网站应用相似,但需在步骤上做相应调整。 首先,访问淘

shp显示源码_spdif源码输出是什么意思

1.SAP SD模块常用用户出口User Exit2.用arcgis导出shp文件怎么显示的是cad形源代码?3.arcgis api 3.x for js地图加载多个SHP图层压缩以及json文件展