Cocos2.2.3在线下载——断点续传
2016-02-29 10:06
363 查看
以下代码实现了Cocos的在线下载中的断点续传,可跨平台使用 #include <fstream> #include <iostream> #include <curl/curl.h> long DLManager::downloadResume() { //判断该要下载的文件是否存在 //http://blog.csdn.net/roger_77/article/details/1538447/ fstream _file; _file.open(getTargetPath().c_str(), ios::in); if(_file) { CCLog("%s is Exist", getTargetPath().c_str()); } else { CCLog("%s is not Exist", getTargetPath().c_str()); return -1; } _file.close(); //获取已下载文件的大小 long fileSize = 0; FILE * fp = fopen(getTargetPath().c_str(), "rb"); if (!fp) { return -1; } fseek(fp, 0, SEEK_END); // 移到文件末尾 fileSize = ftell(fp); CCLog("getTargetPath().c_str() : size = %d\n", fileSize); fclose(fp); return fileSize; } bool DLManager::download() { //断点续传获取续传文件的大小 _curPackageSize = downloadResume(); //打开文件,将文件指针移到末尾 FILE *fp = fopen(getTargetPath().c_str(), "a+b"); if (! fp) { CCLog("can not create file %s", getTargetPath().c_str()); return false; } fseek(fp, 0, SEEK_END); //下载文件 CURL *_curl; _curl = curl_easy_init(); if (! _curl) { CCLog("can not init curl"); return false; } // Download pacakge CURLcode res; curl_easy_setopt(_curl, CURLOPT_URL, _packageUrl.c_str()); curl_easy_setopt(_curl, CURLOPT_WRITEFUNCTION, downLoadPackage); curl_easy_setopt(_curl, CURLOPT_WRITEDATA, fp); curl_easy_setopt(_curl, CURLOPT_NOPROGRESS, false); curl_easy_setopt(_curl, CURLOPT_PROGRESSFUNCTION, DLManagerProgressFunc); curl_easy_setopt(_curl, CURLOPT_PROGRESSDATA, this); if(_curPackageSize != -1) {//若存在断点续传的文件,则设置下的起始位置,即已下载的包的大小 curl_easy_setopt(_curl, CURLOPT_RESUME_FROM, _curPackageSize); } res = curl_easy_perform(_curl); curl_easy_cleanup(_curl); if (res != 0) { CCLog("error when download package"); fclose(fp); return false; } CCLog("succeed downloading package %s", _packageUrl.c_str()); fclose(fp); }
相关文章推荐
- cocos2d-x图层以及显示对象的基本使用
- cocos2d-x基础元素之显示对象
- Cocos2dx工程总结
- cocos2d-x 有关Node
- 初试cocos2d-x坐标系
- cocos2d-x与lua数据传输操作之C++版ByteArray
- COCOS学习笔记--粒子系统
- 【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之四】使用绑定C++至Lua的自己定义类
- cocos2d-x 3.10 屏幕适配问题
- Cocos2d-x 3.9 Lua 自定义事件
- Cocos2d-x 3.x引用计数
- cocos2d-x Lua绑定C++ 自定义类到Runtime(Lua-binding)
- Cocos2d-x 3.x物理世界
- cocos2d-x-bug集
- ScrollView模拟上拉刷新
- cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測
- 【Cocos2d-x 001】VS2012打开Cocos解决方案显示加载失败
- Cocos2d-x优化中多线程并发訪问
- cocos2dx实现象棋之运动
- spine3.0导出文件转换成cocos3.8可使用文件工具