cocos2dx 文件处理

xiaoxiao2025-06-24  8

问题1:fopen 在vs下使用fopen进行文件处理,跑通了,但是移植到android下时就出现了一大推问题,首先需要理解的是在vs下开发资源是存放在执行文件的相同目录下的,而移植到android下时资源是存放在assets目录下的,之前尝试过使用以下的方法: char* fileName = "bg.png"; string filepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName); FILE *fp = fopen(filepath.c_str(), "r");

结果还是报错,一进游戏就挂了,估计是跟底层有关,没有深究,解决方法是使用cocos2dx的CCFileUtils char* filename = "bg.png"; //获得文件在系统的绝对路径--assets/bg.png string filepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(filename); //读取的字节数,读取失败则为0 unsigned long len = 0; //读取的内容 unsigned char *data =CCFileUtils::sharedFileUtils()->getFileData(filepath.c_str(), "rb", &len);

/* 此处进行你对文件的操作 */

//最后记得释放内存 if(len >0 && data) delete[] data;

/***********************接口说明***************************** static unsigned char* getFileData  ( const char *  pszFileName,     const char *  pszMode,     unsigned long *  pSize    )  pszMode: r 以只读方式打开文件,该文件必须存在。    r+ 以可读写方式打开文件,该文件必须存在。    rb+ 读写打开一个二进制文件,允许读数据。    rt+ 读写打开一个文本文件,允许读和写。    w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。    w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。    a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)    a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)    wb 只写打开或新建一个二进制文件;只允许写数据。    wb+ 读写打开或建立一个二进制文件,允许读和写。    wt+ 读写打开或着建立一个文本文件;允许读写。    at+ 读写打开一个文本文件,允许读或在文本末追加数据。    ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 */ 问题2:tinyxml 使用tinyxml来读xml文件,之前我的做法是: //根据xml数据创建动画 string xmlFile_path = "bg.xml"; //读取动作XML文件 tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument(); doc->LoadFile(xmlFile_path.c_str()); tinyxml2::XMLElement *ani_node=doc->RootElement();  tinyxml2::XMLElement *action_node=ani_node->FirstChildElement("action"); 在vs下是跑通了,但移植到android下就崩溃了,后来在网上看到一些解决方法:连接http://blog.sina.com.cn/s/blog_6e5f7d400100zlj7.html 先把xml文件读取到一个buff,然后让tinyxml来解析这个buff,让tinyxml绕过了读取文件失败的bug //根据xml数据创建动画 string xmlFile_path = "bg.xml"; //获得文件在系统的绝对路径 string xmlfilepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(xmlFile_path.c_str()); //读取的字节数,读取失败则为0 unsigned long len = 0; //读取的内容 unsigned char *data =CCFileUtils::sharedFileUtils()->getFileData(xmlfilepath.c_str(), "r", &len); //读取动作XML文件 tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument(); doc->Parse((char*)data, len); tinyxml2::XMLElement *ani_node=doc->RootElement();  tinyxml2::XMLElement *action_node=ani_node->FirstChildElement("action"); ---------------------  作者:yeungxuguang  来源:  原文:https://blog.csdn.net/yeungxuguang/article/details/19928855  版权声明:本文为博主原创文章,转载请附上博文链接!

转载请注明原文地址: https://www.6miu.com/read-5032393.html

最新回复(0)