CHttpFile下载文件小例子

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值