CrossApp开发时, 存放在Resource下的文件在android环境下使用assets/..路径 使用C++的文件操作类如(fopen、ifstream等)找不到的问题
来源:互联网 发布:免费杀木马软件 编辑:程序博客网 时间:2024/05/19 15:20
CrossApp开发时, 存放在Resource下的文件在android环境下使用assets/..路径 使用C++的文件操作类如(fopen、ifstream等)找不到的问题
当时遇到的问题是我在Resource文件夹下放入.lrc 的歌词文件。用C++来获取lrc歌词数据并解析。在ios上是没问题的。但是在安卓上就歇逼了。发现问题是没找到文件,在判断is_open()时就通不过了。想过会不会是在android环境不支持ifstream此类C++文件数据流,但是Cocos2d-x的FileUtils::getInstance()->getFileString()就是使用的FILE* ... = fopen()来操作文件的。ifstream按道理讲也应该是没问题才对。想了想如果是单纯的找不到那会不会是路径有问题,然后我就试着输出了文件路径发现是assets/wdzg.lrc.这路径讲道理在android目录下确实是这样的没错。然后就试着搜索cocos2dx 在android平台打开文件问题。
直到看到这篇文章http://blog.csdn.net/hackmind/article/details/39642837终于有点眉目了。 这篇文章说到cocos2d-x 底层,发现android部分是调用的ndk里的AAssetManager_open方法。(略。。)。不是去通过这个路径打开文件,而是去一个文件管理器查找。至此90%确定是这个原因了。接下来又看了几个文章 直到这篇文章 http://blog.csdn.net/dinko321/article/details/41309735 。他说:
一、assets其实是一个zip压缩文件,直接读取里面的内容是不行的。
二、android的实现和其他2个平台不一样。
这次终于确定了原因,路径确实是没有错的 但是原因assets文件的性质(是压缩文件)问题,导致通过路径去获得assets里的内容是行不通的。如此悲惨的发现我不能把文件直接放Resource下了直接使用了。因为我解析.lrc文件用的用到了getline(basic_istream, basic_string)这个C++方法获取文件中的 单行数据。而这个方法的参数就限定了必须用ifstream,用ifstream就要通过路径来获取文件。如此就死循环了。
最后转思路了, 我不放assets下还不行吗。。。。 我就把测试数据放服务器上, 然后下载到本地(使用getWritablePath()获得可读写路径)这样就不是在assets下了。。。。 最后美滋滋的测试通过了。
最后的最后在写这篇文章时想到如果 用FileUtils::getInstance()->getFileString()获得数据再保存一份到本地另一个文件 应该也是可以的。 0.0
(不过我这项目最后必定还是要下载.lrc文件的所以也就没差了)
项目代码就不贴出来了。 思路就是这么个思路了。 希望对看文章的你有帮助。也感谢帮助到我的人。
- CrossApp开发时, 存放在Resource下的文件在android环境下使用assets/..路径 使用C++的文件操作类如(fopen、ifstream等)找不到的问题
- Android项目使用Assets下的文件
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- Android 使用存放在存assets文件夹下的SQLite数据库
- 在Yii中使用fopen找不到路径的解决
- 使用flash时,需注意swf文件的存放路径(涉及flash时,相关的文件最好放在同一域名下)
- android使用assets文件下的.9.png格式图片
- Xamarin.Android 如何使用Assets目录下的文件
- [寒江孤叶丶的CrossApp之旅_01]CrossApp在MAC下的环境搭建
- [寒江孤叶丶的CrossApp之旅_01]CrossApp在MAC下的环境搭建
- Linux(C/C++)下的文件操作open,fopen
- Android开发 读取assets下的TXT文本一直提示找不到文件
- 将xml字符串转换成map,list 的转换
- 秋招第一面
- 在OC中实现BOLL,RSI,WR算法
- 正则表达式匹配
- 【Oracle】日期类型理解
- CrossApp开发时, 存放在Resource下的文件在android环境下使用assets/..路径 使用C++的文件操作类如(fopen、ifstream等)找不到的问题
- (2017.8.14更新)CnCrypt加密U盘1.22,将U盘划分为普通盘和加密盘,支持与U盘启动盘共存
- Pythpn 爬虫爬取某宝商品数据
- ARKit 根据手指点击到屏幕上得点 获取真实空间中的坐标
- C语言中自带的头文件(.h)所包含的函数
- HDU4815Little Tiger vs. Deep Monkey(01背包)
- publish over cifs实现windows远程部署
- BZOJ4237:稻草人 (CDQ分治+二分+单调栈)
- 2017年8月10号提高组T2 飞行