Code:
#include <windows.h>
#include <wininet.h>
#pragma comment(lib, "winInet.lib")
#define MAX_INTERNETFILE_LENGTH 20480
char* DownloadFile(char* strURL,HWND hwnd)
{
BYTE data[MAX_INTERNETFILE_LENGTH];
HINTERNET hInternet=NULL;
hInternet=InternetOpen("agent name",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
HINTERNET hOpenURL=InternetOpenUrl(hInternet,strURL,NULL,0,INTERNET_FLAG_DONT_CACHE,0);
DWORD dwSize=0;
DWORD dwOffset=0;
DWORD dwNumBytesRead=0;
BOOL returnValue=TRUE;
char* vData=(char*)malloc(1);
while(returnValue)
{
returnValue=InternetReadFile(hOpenURL,(VOID*)data,MAX_INTERNETFILE_LENGTH,&dwNumBytesRead);
if(!dwNumBytesRead)
{
if(!returnValue)
MessageBox(hwnd,"Error downloading file.","Error",MB_OK);
break;
}
dwSize+=dwNumBytesRead;
vData=(char*)realloc((void*)vData,dwSize+1);
memcpy(vData+dwOffset,(void*)data,dwNumBytesRead);
dwOffset+=dwNumBytesRead;
}
*(vData+dwOffset)='\0';
InternetCloseHandle(hOpenURL);
InternetCloseHandle(hInternet);
return vData;
}
Won't return until all data has been downloaded for that file. It returns (as a char*) the data for the file, which you must delete when done with.
Windows-specific, mind you.