• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++调用迅雷接口解析XML下载功能(迅雷下载功能)

C++调用迅雷接口解析XML下载功能(迅雷下载功能)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ xml,c++读取xml文件,c++解析xml文件,c++ xml解析,c++api接口等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

迅雷下载库的网址:http://thunderplatform.xunlei.com

// 下载队列的大小,决定同时开启下载线程的数量
const int LIMIT = 2;

struct Down
{
    // 解析出来的下载地址
    CString strDownURL;
    // 保存的路径
    CString strSavePath;
};

struct Flag
{
    DWORD dwFlag;            // 记录下载线程实时状态
    LONG lTaskId;            // 记录对应任务ID号
    ULONGLONG ullFileSize;    // 下载文件大小
    ULONGLONG ullRecvSize;    // 已下载大小
};

class CDownload
{
private:

    // 保存下载的日志信息
    std::vector<CString> strLogArr;

    // 解析XML文件
    //void Analysis (LPCTSTR lpPathXML, LPCTSTR lpBegin, LPCTSTR lpEnd);
    void Analysis (LPCTSTR lpPathXML);

    // 开始下载
    void Start (void);

    // 调用迅雷的下载接口
    void CreateDownThread (int n);

    // 下载任务查询监控线程
    static void DownQury (LPVOID ptr);

    // 保存日志
    void SaveLog (LPCTSTR lpPathAndName);

public:

    // 保存解析出来的下载队列
    std::vector<Down> strDownArr;

    // 记录最新的下载位置
    int m_nIndex;

    // 下载队列的大小,对应位为1时,该下载位为空,可以启动新的下载线程
    struct Flag Flags[LIMIT];

    // 总共的下载数
    int m_nTotal;

    // 失败的下载数
    int m_nFail;

    // 成功的下载数
    int m_nSuccess;

    CDownload();
    ~CDownload();
    BOOL DownloadFilesByXML(LPCTSTR lpPahtXML);
};
</div>

// 包含XTP界面库头文件
#include "XTToolkitPro.h"

CDownload::CDownload()
{
    // 初始化
    m_nIndex = 0;

    // 初始化为没有下载线程
    for (int n=0; n<LIMIT; n++)
    {
        Flags[n].dwFlag = 1;
        Flags[n].lTaskId = n;
    }

    m_nSuccess = 0;
    m_nTotal = 0;
    m_nFail = 0;
}

CDownload::~CDownload()
{

}

BOOL CDownload::DownloadFilesByXML(LPCTSTR lpPathXML)
{
    DWORD dwRet = XL_SUCCESS;

    // 检测XML文件是否存在
    if (!PathFileExists(lpPathXML))
    {
        ::MessageBox(NULL, _T("XML文件不存在!"), _T("友情提示"), MB_OK|MB_ICONEXCLAMATION);   
        return FALSE;
    }

    // 解析XML文件
    Analysis(lpPathXML);

    // 统计下载链接数
    m_nTotal = strDownArr.size();

    // 开始下载
    Start();

    return TRUE;
}

//void CDownload::Analysis(LPCTSTR lpPathXML, LPCTSTR lpBegin, LPCTSTR lpEnd)
void CDownload::Analysis(LPCTSTR lpPathXML)
{
    // 读取XML文件
    CXTPPropExchangeXMLNode px(TRUE, NULL, _T("DownLoadInfo"));

    if (!px.LoadFromFile(lpPathXML))
    {

        ::MessageBox(NULL, _T("打开XML文件出错!"), _T("友情提示"), MB_OK|MB_ICONEXCLAMATION);
        return;
    }

    if (!px.OnBeforeExchange())
    {
        ::MessageBox(NULL, _T("OnBeforeExchange false!"), _T("友情提示"), MB_OK|MB_ICONEXCLAMATION);
        return;
    }

    px.SetCompactMode(TRUE);

    CXTPPropExchangeEnumeratorPtr enumItem(px.GetEnumerator(_T("Item")));
    POSITION posItem = enumItem->GetPosition();

    CString strLocalName;
    Down down;

    // 遍历所有的结点
    while (posItem)
    {
        CXTPPropExchangeSection sec(enumItem->GetNext(posItem));

        if (sec->IsLoading())
        {
            PX_String(sec->GetSection(_T("URL")), NULL, down.strDownURL);
            PX_String(sec->GetSection(_T("LocalPath")), NULL, down.strSavePath);
            PX_String(sec->GetSection(_T("LocalName")), NULL, strLocalName);

            down.strSavePath += strLocalName;
            // 路径转换
            down.strSavePath.Replace('/', '\\');

            strDownArr.push_back(down);
        }
    }
}

// 下载任务查询
void CDownload::DownQury (LPVOID ptr)
{
    CDownload* pDown = (CDownload*)ptr;
    bool nSign = true;
    DWORD dwRst;
    TCHAR errorBuf[500];
    DWORD dwSize = 500;
    CString strLog;

    // 如果没有下载完成一直下载
    while ((pDown->m_nIndex < (pDown->strDownArr).size()) || nSign)
    {
        int n = 0;
        LONG temp = -1;
        nSign = false;

        while (n<LIMIT)
        {
            switch(pDown->Flags[n].dwFlag)
            {
                // 没有下载,开始新的下载
&nb

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析C++中的5个存储类的作用
  • 解析C++编程中如何使用设计模式中的状态模式结构
  • 解析C++的线性表链式存储设计与相关的API实现
  • 解析C++编程中异常相关的堆栈展开和throw()异常规范
  • 解析C++编程中的继承方面的运用
  • C++如何实现DNS域名解析
  • C++调用迅雷接口解析XML下载功能(迅雷下载功能)
  • 解析C++ 浮点数的格式化输出
  • 解析C++ 浮点数的格式化显示

相关文章

  • 2017-05-28关于STL的erase()陷阱-迭代器失效问题的总结
  • 2017-05-28浅谈VC中预编译的头文件放那里的问题分析
  • 2017-05-28VC6.0如何创建以及调用动态链接库实例详解
  • 2017-05-28C语言中字符串常用函数strcat与strcpy的用法介绍
  • 2017-05-28深入解析C++编程中线程池的使用
  • 2017-05-28c++中inline的用法分析
  • 2017-05-28C语言double和float 实例分析
  • 2017-05-28C++ 中try finally关键字详解
  • 2017-05-28详解C++中变量的初始化规则
  • 2017-05-28mingw编译的windows命令行贪吃蛇示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • DHCP:解析开发板上动态获取ip的2种实现方法详解
    • C++按位异或运算符的使用介绍
    • 关于C++为什么不加入垃圾回收机制解析
    • c++静态局部变量和静态函数示例
    • C++实现“隐藏实现,开放接口”的方案
    • wchar_t,char,string,wstring之间的相互转换
    • C++ vector的用法小结
    • C++多线程编程简单实例
    • 详解C语言sscanf()函数、vsscanf()函数、vscanf()函数
    • C语言安全之数组长度与指针实例解析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有