问题1:fopen

在vs下使用fopen进行文件处理,跑通了,但是移植到android源码下时就出现了一大推问题,首先需要理解的是在vs下开发资源是存放在执行文件的相同目录下的,而移植到android下时资源是存放在assets目录下的,之前尝试过使用以下的方法:

  1. char* fileName = "bg.png";
  2. string filepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName);
  3. FILE *fp = fopen(filepath.c_str(), "r");

结果还是报错,一进游戏就挂了,估计是跟底层有关,没有深究,解决方法是使用cocos2dx的CCFileUtils

  1. char* filename = "bg.png";
  2. //获得文件在系统的绝对路径--assets/bg.png
  3. string filepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(filename);
  4. //读取的字节数,读取失败则为0
  5. unsigned long len = 0;
  6. //读取的内容
  7. unsigned char *data =CCFileUtils::sharedFileUtils()->getFileData(filepath.c_str(), "rb", &len);
  8. /*
  9. 此处进行你对文件的操作
  10. */
  11. //最后记得释放内存
  12. if(len >0 && data) delete[] data;
  13. /***********************接口说明*****************************
  14. static unsigned char* getFileData  ( const char *  pszFileName,
  15. const char *  pszMode,
  16. unsigned long *  pSize
  17. )
  18. pszMode:
  19. r 以只读方式打开文件,该文件必须存在。
  20. r+ 以可读写方式打开文件,该文件必须存在。
  21. rb+ 读写打开一个二进制文件,允许读数据。
  22. rt+ 读写打开一个文本文件,允许读和写。
  23. w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  24. w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  25. a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  26. a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  27. wb 只写打开或新建一个二进制文件;只允许写数据。
  28. wb+ 读写打开或建立一个二进制文件,允许读和写。
  29. wt+ 读写打开或着建立一个文本文件;允许读写。
  30. at+ 读写打开一个文本文件,允许读或在文本末追加数据。
  31. ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  32. */

问题2:tinyxml

使用tinyxml来读xml文件,之前我的做法是:

  1. //根据xml数据创建动画
  2. string xmlFile_path = "bg.xml";
  3. //读取动作XML文件
  4. tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument();
  5. doc->LoadFile(xmlFile_path.c_str());
  6. tinyxml2::XMLElement *ani_node=doc->RootElement();
  7. 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

  1. //根据xml数据创建动画
  2. string xmlFile_path = "bg.xml";
  3. //获得文件在系统的绝对路径
  4. string xmlfilepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(xmlFile_path.c_str());
  5. //读取的字节数,读取失败则为0
  6. unsigned long len = 0;
  7. //读取的内容
  8. unsigned char *data =CCFileUtils::sharedFileUtils()->getFileData(xmlfilepath.c_str(), "r", &len);
  9. //读取动作XML文件
  10. tinyxml2::XMLDocument* doc=new tinyxml2::XMLDocument();
  11. doc->Parse((char*)data, len);
  12. tinyxml2::XMLElement *ani_node=doc->RootElement();
  13. tinyxml2::XMLElement *action_node=ani_node->FirstChildElement("action");

cocos2dx 文件处理源码搜藏网整理,转载请注明出处http://www.codesocang.com/jiaocheng/shoujikaifa/10121.html

cocos2dx 文件处理的更多相关文章

  1. Cocos2d-x 3.0新引擎文件夹结构

    Cocos2d-x 3.0新引擎文件夹结构 2014年4月29日  Cocos2d-x 3.0学习 作为一个Cocos2d-x的菜鸟,我倒是挺愿意关注不同版本号之间的差别,Cocos2d-x 3.0自 ...

  2. 一步一步了解Cocos2dx 3.0 正式版本开发环境搭建(Win32/Android)

    cocos2d-x 3.0发布有一段时间了,作为一个初学者,我一直觉得cocos2d-x很坑.每个比较大的版本变动,都会有不一样的项目创建方式,每次的跨度都挺大…… 但是凭心而论,3.0RC版本开始 ...

  3. VS2010下安装Cocos2dx完整教程(原)

    一.本人所使用的Cocos2dx版本(cocos2d-2.1rc0-x-2.1.3),下载地址:http://code.google.com/p/cocos2d-x/downloads/list 当前 ...

  4. 初入Cocos2d-x 2.2

    下载2.2,用迅雷离线下载很快搞定. 解压后,打开cocos2d-win32.vc2012.sln,编译,超慢,20分钟才完事. 然后想创建一个新项目,需要用到python,用python3.3运行脚 ...

  5. Cocos2d-x游戏移植到Android平台

    1.所需环境支持:Android SDK.NDK.Eclipse.Cygwin.(本人所用系统WIN7-64位) (1)Cygwin的下载安装: Cygwin是Windows下的Linux模拟环境,用 ...

  6. Mac下安装cocos2d-x环境

    安装后xcode之后,下载cocos2dx压缩包,解压 通过中断cd到cocos2dx文件夹内 输入下行命令 sudo ./install-templates-xcode.sh 执行成功后打开xcod ...

  7. cocos2dx系列笔记(2)- windows环境配置后续之 Android环境配置

    续上篇 对于想用cocos2dx来开发Android游戏的人来说,最痛苦的莫过于配置Android环境和之后的奇奇怪怪的编译失败问题.这是经历了多次成功与失败之后,血与泪的经验包,大家请收好.如果你有 ...

  8. cocos2dx系列笔记(1)- windows环境配置前篇

    cocos2dx升级之旅,请多指教~ 本篇是本人搭建cocos2dx-Windows 64位环境的配置说明,仅供参考. 开发准备 搭建环境肯定需要准备好所有工具,只有把工具都准备好了,才能撸起袖子干活 ...

  9. win7 vs2010 安装cocos2d-x

    http://blog.csdn.net/leoncoder/article/details/12523727 新安装搭建cocos2d-X的跳过这里,看以下红色開始: cocos2d-x删除vs20 ...

随机推荐

  1. nyist 740 “炫舞家“ST(动态规划)

    dp[i][j][k]:表示第i次踩踏后两脚的位置j,k 先固定一只脚的位置j,第i次踩踏后,状态为dp[i][j][a[i]]或者dp[i][a[i]][j],其中a[i]表示第i个输入的元素,则有 ...

  2. bzoj2004

    反正N<=10^9肯定是矩阵乘法反正p<=10肯定是状压dp首先有一个非常重要的性质是任意连续P个站,必须保证K辆车必须停在其中的一个站我们设f[i,S]表示到第i个站搞定了后,这K辆公交 ...

  3. POJ_3662_Telephone_Lines_(二分+最短路)

    描述 http://poj.org/problem?id=3662 给一张图,要将1与n连起来.可以有k条边免费,其他边自费,付费的值为所有自费边中最大的值.求最小付费. Telephone Line ...

  4. jQuery 参考手册 - 事件

    事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件. bind()向匹配元素附加一个或更多事件处理器 $(selector).bind(event,function) $(select ...

  5. 借助bool判断使冒泡排序效率提高

    排序问题是编程中最常见的问题.实际应用中,计算机有接近一半时间是在处理有关数据排列的问题,提高排序的效率有助于更快地解决问题. 先来说说平常一般的冒泡算法,使用两个循环,外循环作为整体排序,每趟循环使 ...

  6. usaco 安慰奶牛

    Description 约翰有N个牧场,编号依次为1到N.每个牧场里住着一头奶牛.连接这些牧场的有P条 道路,每条道路都是双向的.第j条道路连接的是牧场Sj和Ej,通行需要Lj的时间.两牧场之 间最多 ...

  7. 制作静态库文件(.a文件)

    制作静态库文件(.a文件) 1.创建静态库工程: 在Xcode中new一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static ...

  8. JVM 的 工作原理,层次结构 以及 GC工作原理

    JVM Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制.JVM实现了Java语言最重要的特征:即平台无关性.原理:编译后的 ...

  9. Classical Inheritance in JavaScript

    JavaScript is a class-free, object-oriented language, and as such, it uses prototypal inheritance in ...

  10. 使用webdav实现文档共享

    1.PC1上开启WebDAV的服务,添加创建规则:运行访问的路径.运行访问的用户(这里的用户是指PC1上的用户名和密码).访问权限