在调用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);