bool InternetDownload(const CString &strURL, const CString &strFN)
{
//此处第一个参数设为NULL会报错,提示没有ApplicationName,因此随意设置一个
CInternetSession internetSession(L" ",
1,
PRE_CONFIG_INTERNET_ACCESS,
NULL,
NULL,
0);
BOOL bSucceed = TRUE;
try
{
// 统一以二进制方式下载
DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD;
//子类对基类进行了强制类型转换,利用函数打开要下载的网址链接 wangsl
//将要下载文件的信息
CHttpFile * pF = (CHttpFile*)internetSession.OpenURL(strURL, 1, dwFlag);
// 得到文件大小
CString str;
pF->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, str);
int nFileSize = _ttoi(str); //文件大小,将字符串转换成整形
//int nTotalSize = nFileSize;
if (pF != NULL)
{
//创建下载文件,不存在就创建,存在就直接写入 wangsl
CFile cf;
if (!cf.Open(strFN, CFile::modeCreate | CFile::modeWrite, NULL))
{
return FALSE;
}
//
BYTE Buffer[8192];
//为Buffer分配空间 wangsl
ZeroMemory(Buffer, sizeof(Buffer));
int nReadLen = 0;
while ((nReadLen = pF->Read(Buffer, sizeof(Buffer))) > 0) //每次读取固定长度到Buffer中,返回实际读取的长度 wangsl
{
cf.Write(Buffer, nReadLen); //在创建的文件中写入读取的内容 wangsl
nFileSize -= nReadLen;
TRACE("剩余:%d\n", nFileSize);
}
cf.Close();
pF->Close();
delete pF;
}
}
catch (CInternetException& e)
{
char szBuffer[128];
ZeroMemory(szBuffer, sizeof(szBuffer));
LPTSTR buffer = NULL;
MtoW(szBuffer,buffer);
e.GetErrorMessage(buffer, sizeof(buffer), NULL);
TRACE("InternetDownload, Exception: %s ", buffer);
}
catch (...)
{
TRACE("InternetDownload, Exception: ... ");
}
internetSession.Close();
if (!bSucceed)
DeleteFile(strFN);
return bSucceed;
}
CHttpFile下载文件小例子
最新推荐文章于 2020-07-22 18:44:00 发布