cocos2d. 3.17.2 c++如何实现下载断点续传zip压缩包带进度条

发布于:2025-09-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

新建类CurlDown
#include “curl/curl.h”
#include
using namespace std;
USING_NS_CC;
/**

  • 资源下载curl
    */
    class CurlDown
    {
    public:
    CurlDown();
    ~CurlDown();
    void StartDownResZip(string downLoadUrl, int64_t totalSize);
    //下载控制
    void downloadControler();
    //下载
    bool download(long timeout);
    // 获取远程下载文件的大小
    long getDownloadFileLenth();
    // 读取本地文件已下载大小
    long getLocalFileLength();

    virtual void DownProgressCallBack(double percent, uint32_t totalSize, uint32_t downSize, string speed) {};
    virtual void DownSuccessCallBack(bool isSuccess, string filefullPath);
    virtual void DownFailCallBack();
    public:
    string mFilePath; // 本地存储地址
    double mFileLenth; // 下载文件大小
    string mDownloadUrl; // 下载URL
    CURL *libcurl;
    int64_t mTotalSize = 0;
    private:
    string mFileName; // 下载文件名称
    bool isStop;
    };

cpp文件
CurlDown::CurlDown()
{
mFileName = “downloaded.temp”;
mFilePath = FileUtils::getInstance()->getWritablePath().append(“downloaded.temp”);
mDownloadUrl = “”;
mFileLenth = 0;
}

ResCurlDown::~ResCurlDown()
{
}

void CurlDown::StartDownResZip(string downLoadUrl, int64_t totalSize)
{
mDownloadUrl = downLoadUrl;
mTotalSize = totalSize;
thread st_d(&CurlDown::downloadControler, this);//创建一个分支线程
st_d.detach();
}

static string getSize(double size)
{
string unit = “”;
char tsize[10] = “”;
if (size > 1024 * 1024 * 1024)
{
unit = “G”;
size /= 1024 * 1024 * 1024;
}
else if (size > 1024 * 1024)
{
unit = “M”;
size /= 1024 * 1024;
}
else if (size > 1024)
{
unit = “KB”;
size /= 1024;
}
spr


网站公告

今日签到

点亮在社区的每一天
去签到