发现   A:运行时候,对话框好象死掉一样不会动;
       B:下载的文件过大时会程序会死掉;(就是不能支持大文件下载 >50M)#include <Wininet.h>
连接器->输入 Wininet.lib 
int CupdateDlg::InternetGetFile(CString szUrl, CString szFileName)
{
DWORD dwFlags;
InternetGetConnectedState(&dwFlags, 0);
CHAR strAgent[64];
HINTERNET hOpen;
if(!(dwFlags & INTERNET_CONNECTION_PROXY))
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;
CHAR   szHead[] = "Accept: */*\r\n\r\n";
VOID* szTemp[65536];
HINTERNET  hConnect;
CFile file; if ( !(hConnect = InternetOpenUrlA ( hOpen, szUrl, szHead,
 lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
{
   AfxMessageBox("不能打开该URL!");
   return -1;
} if  (file.Open(szFileName,CFile::modeWrite|CFile::modeCreate)==FALSE )
{
   AfxMessageBox("不能打开本地的文件!");
  return -1;
} DWORD dwByteToRead = 0;
DWORD dwSizeOfRq = 4;
DWORD dwBytes = 0;    if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, 
                  (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
{
dwByteToRead = 0;
} CString tempstring; do
{
if (!InternetReadFile (hConnect, szTemp, 65536,  &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;
}

解决方案 »

  1.   

    use Asynchronous Wininet to handle timeout.
    http://www.codeproject.com/useritems/asyncwininet.asp
      

  2.   

    int CupdateDlg::InternetGetFile(CString szUrl,          //要下载文件的URL
                                      CString szFileName)   //下载的文件名InternetGetConnectedState  //得到当前的网络连接信息
    InternetOpenA              //打开一个Internet 网络连接
    InternetOpenUrlA           //打开一个URL
    HttpQueryInfo              //查看连接的信息
    InternetReadFile           //读取Internet文件
      

  3.   

    需要描述下载进度吗?
    如果不需要,用 URLDownloadToFile 这个 api 吧
    HRESULT URLDownloadToFile(          LPUNKNOWN pCaller,
        LPCTSTR szURL,
        LPCTSTR szFileName,
        DWORD dwReserved,
        LPBINDSTATUSCALLBACK lpfnCB
    );
      

  4.   

    在问问怎样使用 InternetReadFileEx 下载文件 
    给个例子看看