现在的位置: 首页 > 综合 > 正文

URLDownloadToFile调用返回E_ABOR问题

2013年10月23日 ⁄ 综合 ⁄ 共 1155字 ⁄ 字号 评论关闭

在调用URLDownloadToFile的时候,发现返回值为E_ABOR,后来debug调试才发现原来URLDownloadToFile函数(第3个参数)不能自动创建下载文件目录,

并且是绝度路径且包括文件名,不能是路径,具体说明如下

HRESULT URLDownloadToFile(
  LPUNKNOWN pCaller,
  LPCTSTR szURL,
  LPCTSTR szFileName,
  DWORD dwReserved,
  LPBINDSTATUSCALLBACK lpfnCB
);

参数介绍说明:
第一个 一般为NULL。

第二个 参数就是要下载文件的目标URL,完整路径。例如:http://192.168.20.17/CHK/ClientSetup/setup.exe,
或者http://192.168.20.17/CHK/ClientSetup/ZFChkProofSetting.aspx等等

第三个 是本地保存路径,也是完整路径。例如:C:\\Temp\\setup.exe(注意如果写成C:\\Temp\\是不正确的),
因为URLDownloadToFile函数不能主动创建文件目录,所以建议在调用URLDownloadToFile函数之前调用PathFileExists()判断文件夹是否存在,
如果不存在,调用CreateDirectory()函数创建完目录才调用URLDownloadToFile.

第四个 是保留,必须为0。


第五个 是指向一个IBindStatusCallback接口的指针,这就类似一种回调机制,你可以参考这些来活动当前下载进度,选择是否继续下载等等,
      一般设置为NULL。

具体代码说明如下:

//判断存放文件的文件夹是否存在,没有就创建
char cFilePath[MAX_PATH] = {'\0'};
int i = strlen("C:\\Temp\\");
memcpy(cFilePath,"C\\Temp\\",i);
    if( !PathFileExists(cFilePath))
    {
        //创建文件夹,没有就创建,创建失败就退出
        if(!CreateDirectory(cFilePath,NULL))
        {
            return false;
        }
    }
memcpy(cFilePath + i,"setup.exe",strlen((LPCTSTR)"setup.exe"));

LPCTSTR urlPath = "http://192.168.20.17/CHK/ClientSetup/setup.exe";

    HRESULT hr = URLDownloadToFile( NULL, lpcCHKProofURL, (LPCTSTR)cFilePath, 0, NULL);

抱歉!评论已关闭.