Get data from a Internet file into a char


I want to get the information downloaded from a file (a BMP image) into a char array. I have this function

#define _countof(x) (sizeof(x) / sizeof(x[0]))

char* DownloadBytes(char* szUrl) {
     HINTERNET hOpen = NULL;
     HINTERNET hFile = NULL;
     char* data = (char*)"";
     DWORD dataSize = 0;
     DWORD dwBytesRead = 0;

     hOpen = InternetOpen("MyAgent", NULL, NULL, NULL, NULL);
     if(!hOpen) return (char*)"";

          hFile = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, NULL);
          if(!hFile) {
          return (char*)"";

     do {
          char buffer[2000];
          InternetReadFile(hFile, (LPVOID)buffer, _countof(buffer), &dwBytesRead);
          char* tempData = new char[dataSize + dwBytesRead];
          memcpy(tempData, data, dataSize);
          memcpy(tempData + dataSize, buffer, dwBytesRead);
          delete[] data;
          data = tempData;
          dataSize += dwBytesRead;
     } while (dwBytesRead);

     return data;

The problem is that I only get the first three bytes of the file and I really don't have any idea of what could be wrong. I am using CodeBlocs + MinGW, on Windows 7. This function is exported into a DLL, but I don't think it does matter. The only thing I can verify is that buffer gets the downloaded data correctly. Something goes wrong with memcpy()


You have my project uploaded here. It is compiled and you have the Release executable if you want to test it.

Please, tell me if this works on your computers. The project type is CodeBlocks but I suppose that you can get those files into any IDE.

Question Self-Answered as of 3 Years Ago
This question has already been solved: Start a new discussion instead
Start New Discussion
View similar articles that have also been tagged: