VC利用http远程下载文件

来源:互联网 发布:mac pretty boy好看吗 编辑:程序博客网 时间:2024/06/05 22:48

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

原创粉丝点击