VC利用http远程下载文件转自:http://blog.csdn.net/zst126/archive/2007/11/16/1888523.aspx
学习笔记
1、.h文件
#pragma once
#include <afxinet.h>
using namespace std;
typedef struct
{
CString strVersion;
CString strServerAddress;
int iPort;
}ConfigUpdate;
typedef ConfigUpdate Config_Update_Info;
class CConfigFileManage
{
public:
CConfigFileManage(void);
public:
~CConfigFileManage(void);
public:
BOOL openConnect(void);
public:
void closeConnect(void);
public:
BOOL downLoadFile(CString& strSavePath, CString& strSourceUrl);
public:
CInternetSession* m_pInterSession;
public:
CHttpConnection* m_pHttpConnect;
public:
Config_Update_Info m_strUpdateInfo;
};
2、.cpp文件
#include "StdAfx.h"
#include "ConfigFileManage.h"
#include <WinSock2.h>
#include <atlconv.h>
#include "Terminal.h"
CConfigFileManage::CConfigFileManage(void)
{
m_pInterSession = NULL;
m_pHttpConnect = NULL;
}
CConfigFileManage::~CConfigFileManage(void)
{
closeConnect();
}
BOOL CConfigFileManage::openConnect(void)
{
closeConnect();
m_pInterSession = new CInternetSession();
if (m_pInterSession == NULL)
{
return FALSE;
}
TRY
{
m_strUpdateInfo.strServerAddress = theApp.m_strUpdateAddress;
m_strUpdateInfo.iPort = theApp.m_iUpdatePort;
m_pHttpConnect = m_pInterSession->GetHttpConnection(m_strUpdateInfo.strServerAddress,(INTERNET_PORT)m_strUpdateInfo.iPort);
if (m_pHttpConnect == NULL)
{
return FALSE;
}
}
CATCH (CMemoryException, e)
{
e->Delete();
return FALSE;
}
END_CATCH
return TRUE;
}
void CConfigFileManage::closeConnect(void)
{
if (m_pInterSession)
{
m_pInterSession->Close();
delete m_pInterSession;
m_pInterSession = NULL;
}
if (m_pHttpConnect)
{
m_pHttpConnect->Close();
delete m_pHttpConnect;
m_pHttpConnect = NULL;
}
}
BOOL CConfigFileManage::downLoadFile(CString& strSavePath, CString& strSourceUrl)
{
CHttpFile* pHttpFile = NULL;
UINT nCount = -1;
char aChrs[1024];
CFile file;
TRY
{
pHttpFile = (CHttpFile*)m_pInterSession->OpenURL(strSourceUrl);
}
CATCH (CMemoryException, e)
{
e->Delete();
#ifdef _DEBUG
AfxMessageBox(_T("服务器不存在!"));
#endif
return FALSE;
}
END_CATCH
if (pHttpFile)
{
CString szContent = _T("");
DWORD dwFlags = HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER;
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bResult = FALSE;
bResult = pHttpFile->QueryInfo(dwFlags,&dwStatus,&dwBuffLen);
if (bResult && dwStatus >= 200 && dwStatus < 300)
{
if (! file.Open(strSavePath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary))
{
return FALSE;
}
while ((nCount = pHttpFile->Read(aChrs,1023)) != 0)
{
file.Write(aChrs,nCount);
}
file.Close();
}
else
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = NULL;
return FALSE;
}
}
else
{
return FALSE;
}
if (pHttpFile)
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = NULL;
}
return TRUE;
}