C#实现调用迅雷下载的方法
迅雷下载是目前使用非常普遍的一个下载软件,本文实例展示了C#实现调用迅雷下载的方法。具体方法如下:
目前该实例代码只支持HTTP协议,具体功能代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Runtime.InteropServices;
usingSystem.Threading;
namespaceThunderSDK
{
classProgram
{
enumenumTaskStatus
{
enumTaskStatus_Connect=0,//已经建立连接
enumTaskStatus_Download=2,//开始下载
enumTaskStatus_Pause=10,//暂停
enumTaskStatus_Success=11,//成功下载
enumTaskStatus_Fail=12,//下载失败
};
publicconstintXL_SUCCESS=0;
publicconstintXL_ERROR_FAIL=0x10000000;
//尚未进行初始化
publicconstintXL_ERROR_UNINITAILIZE=XL_ERROR_FAIL+1;
//不支持的协议,目前只支持HTTP
publicconstintXL_ERROR_UNSPORTED_PROTOCOL=XL_ERROR_FAIL+2;
//初始化托盘图标失败
publicconstintXL_ERROR_INIT_TASK_TRAY_ICON_FAIL=XL_ERROR_FAIL+3;
//添加托盘图标失败
publicconstintXL_ERROR_ADD_TASK_TRAY_ICON_FAIL=XL_ERROR_FAIL+4;
//指针为空
publicconstintXL_ERROR_POINTER_IS_NULL=XL_ERROR_FAIL+5;
//字符串是空串
publicconstintXL_ERROR_STRING_IS_EMPTY=XL_ERROR_FAIL+6;
//传入的路径没有包含文件名
publicconstintXL_ERROR_PATH_DONT_INCLUDE_FILENAME=XL_ERROR_FAIL+7;
//创建目录失败
publicconstintXL_ERROR_CREATE_DIRECTORY_FAIL=XL_ERROR_FAIL+8;
//内存不足
publicconstintXL_ERROR_MEMORY_ISNT_ENOUGH=XL_ERROR_FAIL+9;
//参数不合法
publicconstintXL_ERROR_INVALID_ARG=XL_ERROR_FAIL+10;
//任务不存在
publicconstintXL_ERROR_TASK_DONT_EXIST=XL_ERROR_FAIL+11;
//文件名不合法
publicconstintXL_ERROR_FILE_NAME_INVALID=XL_ERROR_FAIL+12;
//没有实现
publicconstintXL_ERROR_NOTIMPL=XL_ERROR_FAIL+13;
//已经创建的任务数达到最大任务数,无法继续创建任务
publicconstintXL_ERROR_TASKNUM_EXCEED_MAXNUM=XL_ERROR_FAIL+14;
//任务类型未知
publicconstintXL_ERROR_INVALID_TASK_TYPE=XL_ERROR_FAIL+15;
//文件已经存在
publicconstintXL_ERROR_FILE_ALREADY_EXIST=XL_ERROR_FAIL+16;
//文件不存在
publicconstintXL_ERROR_FILE_DONT_EXIST=XL_ERROR_FAIL+17;
//读取cfg文件失败
publicconstintXL_ERROR_READ_CFG_FILE_FAIL=XL_ERROR_FAIL+18;
//写入cfg文件失败
publicconstintXL_ERROR_WRITE_CFG_FILE_FAIL=XL_ERROR_FAIL+19;
//无法继续任务,可能是不支持断点续传,也有可能是任务已经失败
//通过查询任务状态,确定错误原因。
publicconstintXL_ERROR_CANNOT_CONTINUE_TASK=XL_ERROR_FAIL+20;
//无法暂停任务,可能是不支持断点续传,也有可能是任务已经失败
//通过查询任务状态,确定错误原因。
publicconstintXL_ERROR_CANNOT_PAUSE_TASK=XL_ERROR_FAIL+21;
//缓冲区太小
publicconstintXL_ERROR_BUFFER_TOO_SMALL=XL_ERROR_FAIL+22;
//调用XLInitDownloadEngine的线程,在调用XLUninitDownloadEngine之前已经结束。
//初始化下载引擎线程,在调用XLUninitDownloadEngine之前,必须保持执行状态。
publicconstintXL_ERROR_INIT_THREAD_EXIT_TOO_EARLY=XL_ERROR_FAIL+23;
[DllImport("XLDownload.dll",EntryPoint="XLInitDownloadEngine")]
publicstaticexternboolXLInitDownloadEngine();
[DllImport("XLDownload.dll",EntryPoint="XLURLDownloadToFile",CharSet=CharSet.Unicode)]
publicstaticexternintXLURLDownloadToFile(stringpszFileName,stringpszUrl,stringpszRefUrl,refInt32lTaskId);
[DllImport("XLDownload.dll")]
publicstaticexternintXLQueryTaskInfo(intlTaskId,refintplStatus,refdoublepullFileSize,refdoublepullRecvSize);
[DllImport("XLDownload.dll")]
publicstaticexternintXLPauseTask(intlTaskId,refintlNewTaskId);
[DllImport("XLDownload.dll")]
publicstaticexternintXLContinueTask(intlTaskId);
[DllImport("XLDownload.dll")]
publicstaticexternintXLContinueTaskFromTdFile(stringpszTdFileFullPath,refintlTaskId);
[DllImport("XLDownload.dll")]
publicstaticexternvoidXLStopTask(intlTaskId);
[DllImport("XLDownload.dll")]
publicstaticexternboolXLUninitDownloadEngine();
[DllImport("XLDownload.dll")]
publicstaticexternintXLGetErrorMsg(intdwErrorId,stringpszBuffer,refintdwSize);
staticvoidMain(string[]args)
{
if(!XLInitDownloadEngine())
{
Console.WriteLine("下载引擎初始化错误");
return;
}
Int32lTaskId=0;
stringfilename="d://xx.exe";
stringurl="http://xmp.down.sandai.net/kankan/XMPSetup_3.8.1.485-www.exe";
stringrefurl="http://xmp.down.sandai.net";
intdwRet=XLURLDownloadToFile(filename,url,refurl,reflTaskId);
if(XL_SUCCESS!=dwRet)
{
XLUninitDownloadEngine();
Console.WriteLine("添加新任务失败");
return;
}
Console.WriteLine("开始下载");
do
{
Thread.Sleep(1000);
doublepullFileSize=0;
doublepullRecvSize=0;
intlStatus=-1;
dwRet=XLQueryTaskInfo(lTaskId,reflStatus,refpullFileSize,refpullRecvSize);
if(XL_SUCCESS==dwRet)
{
if((int)enumTaskStatus.enumTaskStatus_Success==lStatus)
{
Console.WriteLine("下载完成");
break;
}
if(0!=pullFileSize)
{
doubledouProcess=(double)pullRecvSize/(double)pullFileSize;
douProcess*=100.0;
Console.WriteLine("下载进度:{0}%",douProcess);
}
else
{
Console.WriteLine("文件长度为0");
}
}
}while(XL_SUCCESS==dwRet);
XLStopTask(lTaskId);
XLUninitDownloadEngine();
}
}
}
希望本文实例对大家学习C#程序设计能起到一定的借鉴作用。