Cocos2d-x项目移植到WP8系列之四:文件操作

读写文件Cocos已经用fopen fwrite来做好了,这里说的主要是文件和文件夹的创建、删除、判断是否存在等。

本来打算把把这部分代码放到C#工程来做,然后通过上一篇说到的C++和C#交互的那个通道来调用的,但是wp8里很多东西都被做成异步的形式了,文件的读写操作也被设计成了异步的形式,但是在C++这边发起调用的方法是需要同步调用的,这里如何转换是一个难题,由于对task PPL 那一套不熟悉,最后没办法只能放到C++工程来做。

另外,在task里那个捕获异常也是很痛苦的一件事情——一直没研究透彻task,所以代码实现得比较挫

 1 bool WZFileUtilWP8::makeDirectory(const std::string& dirPath)
 2 {
 3
 4     auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
 5     Platform::String ^pStr_FileName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(dirPath.c_str()).c_str());
 6
 7     create_task(localFolder->CreateFolderAsync(pStr_FileName, CreationCollisionOption::ReplaceExisting)).wait();
 8
 9     CCLog("craete folder: %s success\n", dirPath.c_str());
10     return true;
11
12 }
13
14
15 bool WZFileUtilWP8::removeDirectory(const std::string& dirName)
16 {
17     //return callCS->FunCallCS_RemoveDirectory(dirName.c_str());
18
19     //删除不存在的文件夹会抛出异常,但这异常在task里捕获真TM蛋疼
20     //现在通过先创建一个和要删除的文件夹同名的文件夹再删除来间接实现
21
22     auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
23     Platform::String ^pStr_dirName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(dirName.c_str()).c_str());
24
25     this->makeDirectory(dirName);
26
27     create_task(localFolder->GetFolderAsync(pStr_dirName)).then([](StorageFolder^ folder)
28     {
29         folder->DeleteAsync();
30     }).wait();
31
32     CCLog("remove folder: %s success\n", dirName.c_str());
33     return true;
34 }
35
36
37 bool WZFileUtilWP8::isFullPathExist(const std::string &fullPath)
38 {
39     auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
40     Platform::String ^pStr_fulaPathName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(fullPath.c_str()).c_str());
41
42     //还是异常捕获太蛋疼,直接创建吧,总是返回true
43     create_task(localFolder->CreateFileAsync(pStr_fulaPathName, CreationCollisionOption::OpenIfExists)).wait();
44
45     CCLog("file: %s is exist\n", fullPath.c_str());
46     return true;
47 }
48
49
50
51 //根据一个多级 目录 的字符串创建目录及文件
52 bool WZFileUtilWP8::makeFullPath(const std::string& fullTargetPath)
53 {
54
55     //wp8可以直接创建多级目录
56     //return callCS->FunCallCS_CreateFullPathFile(fullPath.c_str());
57
58
59     auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
60     Platform::String ^pStr_fullPathName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(fullTargetPath.c_str()).c_str());
61     create_task(localFolder->CreateFileAsync(pStr_fullPathName, CreationCollisionOption::ReplaceExisting)).wait();
62
63     CCLog("create file: %s success\n", fullTargetPath.c_str());
64
65     return true;
66
67 }
时间: 2024-10-25 20:10:49

Cocos2d-x项目移植到WP8系列之四:文件操作的相关文章

Cocos2d-x项目移植到WP8系列之二:开篇

开发环境一笔带过吧,主板和CPU要支持虚拟化技术,要开启才行,装个64位win8.1系统,win8不好用,我用的是vs2012,然后装个wp8的SDK,再装个vs2012的补丁4,最后能把模拟器跑起来能上网就可以了.模拟器上网这也是个蛋疼问题,如果电脑是通过路由器DHCP自动分配IP模拟器能正常上网,但在公司里电脑是根据Mac地址绑定IP的,模拟器上不了网,这里面碰到问题的话自行谷歌吧. 公司的框架是在Cocos2d-x的框架之上稍微封装了一下,方便加上一些自己的功能,总的来说就是业务层用Lua

Cocos2d-x项目移植到WP8系列之一:前传

许久没动笔了,随想一直都有动笔的想法,但拖来拖去,归根到底还是一个懒字吧 .发现人的惰性真是太强大了,特别是在像我这种意志不够坚定的人,稍微拖一拖,一个星期,一个月,大半年,就这样都过去了,加上平时的效率也挺低的,时间都浪费得让人心痛,再和一些刚毕业一年的后辈相比,发现根本跟不上他们的步伐,无论是已掌握的技术或者学习新的东西,才猛然惊醒,甚为愧疚.针对性下药,现在强迫自己把一些要做的工作上的事情都写在一个几乎从不关闭的Excel里,每次回到桌面都能看到,还有哪些事情没有完成的,完成后就标记一下,

Cocos2d-x项目移植到WP8系列之三:C++和C#的交互

上一篇提到工程使用 XAML 和 Direct3D 项目模板 是因为要涉及到C++和C#的交互,微软给我们提供了一个叫运行时组件的东西(也就是 windows phone 运行时组件 模板,一下简称winRT组件)来实现两者的交互.winRT组件 工程里用的C++/CX语言(关于winRT自行谷歌),但完全兼容C++.在winRT组件 工程里,里面定义的类和方法只要符合一定的规范,就能被C#的工程直接访问到,那C++如何访问C#呢?毕竟,在Cocos2dx-wp8框架里,除了一开始启动是从xam

Cocos2d-x项目移植到WP8系列之八:CCLabelTTF显示中文不换行

在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空格进行判断的,每遇到一个空格就判断是否超过label的宽度,超过就换行,但text如果是中文的话,哪来的空格给换行~~ 以下实现全部参考 http://blog.csdn.net/hopingwhite/article/details/38414917 ,整理后的代码如下: 在CCFreeTypeFont.h里的CCFreeTypeFont类添加两个方法: FT_Error addLine(con

Cocos2d-x项目移植到WP8系列之六:C#工程使用C++的DLL

此时,一些大问题都被解决后,整个工程基本能跑起来了,最后一个大问题是:业务层是用Lua开发的,底层的源码对他们是不可见的,也就是需要把我们工程生成的各种DLL.lib.winmd文件拿出来然后再搭建一个开发环境给项目组使用,要求就是,每次底层改了什么只需要把对应的生成的lib.dll.winmd文件给他们替换就行了,而他们的开发环境里工程并不需要因此而变.嗯,但我们的工程大部分都是C++的,有DLL工程,也有lib工程,还有运行时工程,如何让C#用上这些工程的生成品? 原本我们的工程结构是这样的

Cocos2d-x项目移植到WP8系列之九:使用自定义shader

有时候想得到一些例如灰度图等特殊的渲染效果,就得用到自定义shader,关于shader的一些背景知识,自行谷歌,列出两篇cocos2dx里介绍shader的相关文章 http://blog.csdn.net/while0/article/details/9666829     http://blog.sina.com.cn/s/blog_aa01f7030101mdom.html cocos2dx在wp8平台不知道是不是在渲染时OpenGL要转成D3D的原因还是其他原因,不能在运行时编译链接s

Cocos2d-x项目移植到WP8系列之七:中文显示乱码

C++和C#互调时经常会带一些参数过去例如最常见的字符串,如果字符串里有中文的话,会发现传递过去后变成了乱码,这是因为两边的编码方式不一样,C#默认使用UnicodeEncoding(中文环境下是GBK?)编码,C++(Lua和cocos2d-x引擎默认编码为UTF-8)里用的是utf8编码.大概流程就是 C++的里的std::string字符串转成 C++/CX 里的 Platform::string,再传到C#里System.String ,从C#到C++的话就是反过来. Cocos其实已经

Cocos2d-x项目移植到WP8系列之五:播放MP3

这一块的细节还是不太了解,只是东凑西拼能跑起来而已 1.网上下载lamb库 生成需要的lib库,详情见 [Advanced Windows Phone Programming]在windows phone 8中录制MP3和AAC及Amr音频  第三点的前半部分,也就是生成lib那一部分,然后在CocosDenshion工程里引用那两个lib. 2.把CocosDenshion工程里的Audio.cpp里的void Audio::PreloadSoundEffect(const char* psz

Python学习系列之文件操作

Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的关闭文件 Python打开文件的模式 基本模式 带'+'的模式 带'b'的模式 #提示:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型 带'+'和带'b'的模式 Python文件读取方式 Pyhton文件写入方式 Python文件操作所提供的方法 close(self) 关闭已经打