Internet檔案下載

來源:互聯網
上載者:User

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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.