vc 保存http服务器文件到本地

#include "Wininet.h"

#pragma comment(lib, "Wininet.lib")

BOOL GetDataFromUrl(LPCTSTR pszUrl, LPBYTE lpData, DWORD& dwDataSize, DWORD& dwBytesRead)
{
CString str;
HINTERNET hSession = ::InternetOpen(_T("YourSectionName") , INTERNET_OPEN_TYPE_PRECONFIG , NULL , NULL , 0);
if(hSession == NULL)
return FALSE;


HINTERNET hHttpFile = ::InternetOpenUrl(hSession , pszUrl , NULL , 0 , 0 , 0);
if(hHttpFile == NULL)
{
::InternetCloseHandle(hSession);  
return FALSE;
}


TCHAR szSizeBuffer [MAX_PATH];
DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
BOOL bRetun = FALSE;
if(::HttpQueryInfo(hHttpFile, HTTP_QUERY_CONTENT_LENGTH, szSizeBuffer, &dwLengthSizeBuffer, NULL))
{
DWORD dwFileSize = _ttol(szSizeBuffer);
dwBytesRead = 0;
if(dwDataSize < dwFileSize)
{
dwDataSize = dwFileSize;
}
else if(::InternetReadFile(hHttpFile , lpData , dwFileSize , &dwBytesRead))
{
bRetun=TRUE;
}
}


::InternetCloseHandle(hHttpFile);
::InternetCloseHandle(hSession);    
return bRetun;

}


BOOL SaveHttpFile(LPCTSTR pszUrl, LPCTSTR lpszFile)

{
DWORD dataSize = 0;
DWORD dwByte = 0;
GetDataFromUrl(pszUrl, NULL, dataSize, dwByte);
if(dataSize == 0)
return FALSE;


CFile file;
if(!file.Open(lpszFile, CFile::modeCreate|CFile::modeWrite))
return FALSE;


LPBYTE lpData = new BYTE[dataSize];
memset(lpData, 0, dataSize);
BOOL bRet = GetDataFromUrl(pszUrl, lpData, dataSize, dwByte);


if(bRet)
file.Write(lpData, dwByte);


delete []lpData;
return bRet;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值