原文链接: http://www.cnblogs.com/zouzf/p/3972457.html

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

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

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

 bool WZFileUtilWP8::makeDirectory(const std::string& dirPath)
{ auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
Platform::String ^pStr_FileName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(dirPath.c_str()).c_str()); create_task(localFolder->CreateFolderAsync(pStr_FileName, CreationCollisionOption::ReplaceExisting)).wait(); CCLog("craete folder: %s success\n", dirPath.c_str());
return true; } bool WZFileUtilWP8::removeDirectory(const std::string& dirName)
{
//return callCS->FunCallCS_RemoveDirectory(dirName.c_str()); //删除不存在的文件夹会抛出异常,但这异常在task里捕获真TM蛋疼
//现在通过先创建一个和要删除的文件夹同名的文件夹再删除来间接实现 auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
Platform::String ^pStr_dirName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(dirName.c_str()).c_str()); this->makeDirectory(dirName); create_task(localFolder->GetFolderAsync(pStr_dirName)).then([](StorageFolder^ folder)
{
folder->DeleteAsync();
}).wait(); CCLog("remove folder: %s success\n", dirName.c_str());
return true;
} bool WZFileUtilWP8::isFullPathExist(const std::string &fullPath)
{
auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
Platform::String ^pStr_fulaPathName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(fullPath.c_str()).c_str()); //还是异常捕获太蛋疼,直接创建吧,总是返回true
create_task(localFolder->CreateFileAsync(pStr_fulaPathName, CreationCollisionOption::OpenIfExists)).wait(); CCLog("file: %s is exist\n", fullPath.c_str());
return true;
} //根据一个多级 目录 的字符串创建目录及文件
bool WZFileUtilWP8::makeFullPath(const std::string& fullTargetPath)
{ //wp8可以直接创建多级目录
//return callCS->FunCallCS_CreateFullPathFile(fullPath.c_str()); auto localFolder = Windows::Storage::ApplicationData::Current->LocalFolder;
Platform::String ^pStr_fullPathName = ref new Platform::String(WZCallCS_And_Back_CommonFunc::stringToWString(fullTargetPath.c_str()).c_str());
create_task(localFolder->CreateFileAsync(pStr_fullPathName, CreationCollisionOption::ReplaceExisting)).wait(); CCLog("create file: %s success\n", fullTargetPath.c_str()); return true; }

原文链接: http://www.cnblogs.com/zouzf/p/3972457.html

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

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

    原文链接: http://www.cnblogs.com/zouzf/p/3970130.html 开发环境一笔带过吧,主板和CPU要支持虚拟化技术,要开启才行,装个64位win8.1系统,win8不 ...

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

    原文链接: http://www.cnblogs.com/zouzf/p/3971021.html 上一篇提到工程使用 XAML 和 Direct3D 项目模板 是因为要涉及到C++和C#的交互,微软 ...

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

    原文链接: http://www.cnblogs.com/zouzf/p/3969993.html 许久没动笔了,随想一直都有动笔的想法,但拖来拖去,归根到底还是一个懒字吧 .发现人的惰性真是太强大了 ...

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

    本文原链接:http://www.cnblogs.com/zouzf/p/3995132.html 有时候想得到一些例如灰度图等特殊的渲染效果,就得用到自定义shader,关于shader的一些背景知 ...

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

    原文链接: http://www.cnblogs.com/zouzf/p/3985330.html 在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空 ...

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

    原文链接: http://www.cnblogs.com/zouzf/p/3984510.html 此时,一些大问题都被解决后,整个工程基本能跑起来了,最后一个大问题是:业务层是用Lua开发的,底层的 ...

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

    原文链接:http://www.cnblogs.com/zouzf/p/3984628.html C++和C#互调时经常会带一些参数过去例如最常见的字符串,如果字符串里有中文的话,会发现传递过去后变成 ...

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

    原文链接: http://www.cnblogs.com/zouzf/p/3972549.html 这一块的细节还是不太了解,只是东凑西拼能跑起来而已 1.网上下载lamb库 生成需要的lib库,详情 ...

  9. Cocos2d-x项目移植到WP8小记

    Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...

随机推荐

  1. python 类成员的修饰符

    类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的定义不同:私有成员命名时,前两个字 ...

  2. C和MATLAB中:同时对多个变量连续赋值

    C语言中绝对不可以连续赋值!!!这是C语言的基本要求. 可以int a,b,c; a=5;b=5;c=5; 或者int a =5;int b=5;int c=5; 但是! 绝对不可以:int a=b= ...

  3. es6 async与await实战

    在使用js的时候,我们经常会遇到一个问题,就是我们需要等待请求返回再做下一步处理,之前的处理方式是通过ajax的success或者callback之类的方法,不过一层一层真的恶心,而且只是针对单个页面 ...

  4. java微信开发API解析(四)-自己定义菜单以及个性化菜单实现

    全局说明 * 具体说明请參考前两篇文章. 本文说明 *本文分为五部分: * 工具类AccessTokenUtils的封装 * 自己定义菜单和个性化菜单文档的阅读解析 * 菜单JSON的分析以及构建相应 ...

  5. jetty;tomcat;热部署

    [说明]今天上午进行了jetty的插件部署,下午进行了tomcat的插件部署,晚上有其它事情需要回校 一:今日完成 1)搞定插件直接部署到jetty 2)搞定插件直接部署到tomcat 3)了解了一下 ...

  6. poj3096

    C++的标准模版库的应用 Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6625   ...

  7. 《从零开始学Swift》学习笔记(Day 26)——可选链

    原创文章,欢迎转载.转载请注明:关东升的博客 在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之 ...

  8. JavaScript基础深入之

    JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...

  9. TFS二次开发-基线文件管理器(2)-TFS登录

    首先需要做一个TFS的登录. 以前的文章是使用的DomainProjectPicker 最新的VS里面使用的是TeamProjectPicker 首先可以在WinForm程序上写一个Button,然后 ...

  10. ASP-DateAdd时间增加

    ASP内置函数DateAdd(interval, number, date) 1.interval标识你要加的日期部分,具体参数如下:yyyy → 年m → 月d → 日h → 小时n → 分钟s → ...