(andriod)2dx fullPathForFilename 注意事项

原文链接:http://blog.csdn.net/yeungxuguang/article/details/19928855

问题1:fopen

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. char* fileName = "bg.png";  
  2. string filepath = CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName);  
  3. FILE *fp = fopen(filepath.c_str(), "r");  

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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.   
  13. //最后记得释放内存  
  14. if(len >0 && data) delete[] data;  
  15.   
  16. /***********************接口说明***************************** 
  17. static unsigned char* getFileData  ( const char *  pszFileName,   
  18.   const char *  pszMode,   
  19.   unsigned long *  pSize   
  20.  )  
  21. pszMode: 
  22. r 以只读方式打开文件,该文件必须存在。    
  23. r+ 以可读写方式打开文件,该文件必须存在。    
  24. rb+ 读写打开一个二进制文件,允许读数据。    
  25. rt+ 读写打开一个文本文件,允许读和写。    
  26. w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。    
  27. w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。    
  28. a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)    
  29. a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)    
  30. wb 只写打开或新建一个二进制文件;只允许写数据。    
  31. wb+ 读写打开或建立一个二进制文件,允许读和写。    
  32. wt+ 读写打开或着建立一个文本文件;允许读写。    
  33. at+ 读写打开一个文本文件,允许读或在文本末追加数据。    
  34. ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。 
  35. */  

问题2:tinyxml

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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");  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值