下载+CreateFile+WriteFile+GetFileSize

int   CUpdate::Download(const char* src, const char* des)
{
	
	HINTERNET internet = InternetOpen("HTTP Downloader", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL) ;
	if (internet == INVALID_HANDLE_VALUE || NULL == internet)
	{
		return -1;
	}

	HINTERNET file_handle = InternetOpenUrl(internet, src, NULL, 0, INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_CACHE_WRITE/*INTERNET_FLAG_DONT_CACHE*/, 0) ;
	if (NULL == file_handle || INVALID_HANDLE_VALUE == file_handle)
	{
		InternetCloseHandle(internet) ;
		return -2;
	}

	ULONG uk = 0;
	DWORD dwStatusCode = 0;
	DWORD dwStatusSize = sizeof(dwStatusCode);
	if (FALSE == ::HttpQueryInfo(file_handle,
		HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
		&dwStatusCode,
		&dwStatusSize,
		&uk))  //获取返回状态码
	{
		InternetCloseHandle(internet) ;
		InternetCloseHandle(file_handle);
		return -3;
	}
	//判断状态码是不是 200
	if (HTTP_STATUS_OK != dwStatusCode)
	{
		InternetCloseHandle(internet) ;
		InternetCloseHandle(file_handle);
		return -4;
	}


	HANDLE hFile = CreateFile(des, GENERIC_ALL, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	if(hFile == INVALID_HANDLE_VALUE)
	{

		InternetCloseHandle(internet) ;
		InternetCloseHandle(file_handle);
		return -5;
	}


	DWORD dwReadDataLength = NULL;
	BOOL bRet = TRUE;
	// 下面将读取的内容写入本地文件中
	//std::string::size_type nPos = strTmpPath.rfind("\\") ;
	//std::string strFileName = strTmpPath.substr(nPos + 1) 


	DWORD dwMaxDataLength = 1024;
	char* pBuffer = new  char[dwMaxDataLength + 1];
	do 
	{
		DWORD dwWritenSize = 0;
		ZeroMemory(pBuffer,dwMaxDataLength);
		bRet = InternetReadFile(file_handle,pBuffer,dwMaxDataLength,&dwReadDataLength);
		if(bRet ==  TRUE)
		{
			pBuffer[dwReadDataLength] = 0 ;
			WriteFile(hFile, pBuffer, dwReadDataLength, &dwWritenSize, NULL);
		}
	

	} while (NULL != dwReadDataLength);

	if(pBuffer)
		delete[] pBuffer;

	InternetCloseHandle(internet) ;
	InternetCloseHandle(file_handle);
	CloseHandle(hFile);



	return 0;
}
DWORD CUpdate::GetFileSize(const char* file)
{
	DWORD dwLen = 0;
	HANDLE hFile = CreateFile(file, GENERIC_ALL, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if(hFile != INVALID_HANDLE_VALUE)
	{
		dwLen = ::GetFileSize(hFile, NULL);
		CloseHandle(hFile);
	}

	return dwLen;


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值