现在的位置: 首页 > 综合 > 正文

Internet文件下载

2013年10月12日 ⁄ 综合 ⁄ 共 2120字 ⁄ 字号 评论关闭

 用InternetGetConnectedState()检测本地网络状态
2 hOpen=InternetOpenA()打开与internet的连接
3 调用hConnect=InternetOpenUrlA()此调用可以打开一个使用URL的Internet文件句柄
4 打开本地文件
5 调用HttpQueryInfo()获的internet文件的大小
6 调用InternetReadFile()下载数据块
7 写入文件
8 关闭文件
9 InternetCloseHandle(hOpen);关闭internet的连接

#include <Wininet.h>
#include <mmsystem.h>

int CInternetDownLoadxDlg::Internertdownload(void* pData  )
{
 
 DWORD dwFlags;
 InternetGetConnectedState(&dwFlags,0);////Retrieves the connected state of the local system
 char strAgent[64];
 sprintf(strAgent,"Agent%ld",timeGetTime());
 HINTERNET hOpen;
 if(!(dwFlags & INTERNET_CONNECTION_PROXY))
 {
  //打开与Internet的连接
  hOpen=InternetOpenA(strAgent,//应用的名称
                      INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,//访问的类型参数
       NULL, 
       NULL,
       0);
 }
 else
 {
  hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
 }

  if(!hOpen)
 {
  AfxMessageBox("Internet连接错误!");
  return -1;
 }
 DWORD dwSize;//这个变量被用于存储每次调用InternetReadFile读取了多少数据
 char  szHead[]="Accept: */*/r/n/r/n";//用于存储多个HTTP头信息。如果在调用InternetOpenUrl时不传递着个头信息,则只允许你打开文本文件
 void* szTemp[16384];//缓冲变量,可以存储来自Internet的16KB的文件数据
 HINTERNET hConnect;//这是一个HINTERNET句柄,包含请求结果(来自InternetOpenUrl)
 CFile file;

 if(!(hConnect=InternetOpenUrlA(hOpen,m_Url,szHead,
                       lstrlenA(szHead),INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_PRAGMA_NOCACHE|
        INTERNET_FLAG_RELOAD,0)))//此调用可以打开一个使用URL的Internet文件句柄。标志表示这个文件总是被读取,而不是缓存(cache
 {
  AfxMessageBox("不能打开该URL!");
    return -1;
 }

 if(file.Open(m_Dirfile,CFile::modeWrite|CFile::modeCreate)==FALSE)
 {
  AfxMessageBox("不能打开本地的文件!");
  return -1;
 }

 DWORD dwByteToRead=0;//存储文件的大小
 DWORD dwSizeOfRq=4;//HttpQueryInfo内容的大小
 DWORD dwBytes=0;//总共读取的字节数

 if(!HttpQueryInfo(hConnect,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,
                (LPVOID)&dwByteToRead,&dwSizeOfRq,NULL))//此调用可以获得文件的大小。如果失败则dwByteToRead被置为0,并且当文件被下载时不会显示百分比和总数
 {
  dwByteToRead=0;
 }

 do
 {
  //每次下载一个16KB的数据块
  if(!InternetReadFile(hConnect,szTemp,16384,&dwSize))
  {
   AfxMessageBox("读文件出错!");
   file.Close();
   return -1;
  }

  if(dwSize==0)
   break;
  else
   file.Write(szTemp,dwSize);
  dwBytes+=dwSize;
 
 }while(TRUE);
 file.Close();
 InternetCloseHandle(hOpen);
 return 0;
}

 

 

抱歉!评论已关闭.