0

なぜこの機能に問題があるのか​​ 知りたいです。Web 上の PNG ファイルを宛先パスにダウンロードしています。たとえば、Google イメージを C: ドライブにダウンロードします。

netDownloadData(" http://www.google.com/intl/en_ALL/images/srpr/logo1w.png ", "c:\file.png");

ダウンロード後のファイルサイズは正しいです。false を返すものはありません。開こうとすると画像が表示されません。どんなアイデアも役に立ちます。ありがとう!

コードは次のとおりです。

bool netDownloadData(const char *strSourceUrl, const char *strDestPath)
{

         HINTERNET hINet = NULL;
    HINTERNET hFile = NULL;
    char buffer[1024];
    DWORD dwRead;
    String sTemp;
    FILE *fp = NULL;
    DWORD size = 0;

    // Open a new internet session
    hINet = netInit();
    if (hINet == NULL) {
        sprintf(buffer, "Initializing WinINet failed.", strSourceUrl);
        utilLog(buffer);
        netCloseHandle(hINet);
        return false;
    }

    // Open the requested url.
    hFile = netOpenUrl(hINet, strSourceUrl);
    if (hFile == NULL) {
        sprintf(buffer, "URL failed upon loading: %s\n", strSourceUrl);
        utilLog(buffer);
        netCloseHandle(hINet);
        return false;
    }

    // Read file.
    while (InternetReadFile(hFile, buffer, 1023, &dwRead))
    {
        if (dwRead == 0)
            break;

        buffer[dwRead] = 0;

        sTemp += buffer;
        size += dwRead;
    }

    // Load information to file. 
    fp = fopen(strDestPath, "wb");
    if (fp == NULL)
        return false;

    fwrite(sTemp, size, 1, fp);
    fclose(fp); 

    InternetCloseHandle(hFile);
    InternetCloseHandle(hINet);

    return true;
}
4

2 に答える 2

3

データ型は何Stringですか?データ内のNULLは潜在的に問題を引き起こす可能性があるため、バイナリデータを文字列に格納することは避けてください。バッファを読み取るときに、次のように書き込みます。

// Load information to file. 
fp = fopen(strDestPath, "wb");
if (fp == NULL)
    return false;

// Read file.
while (InternetReadFile(hFile, buffer, 1024, &dwRead))
{
    if (dwRead == 0)
        break;

    fwrite(buffer, dwRead, 1, fp);
}

fclose(fp); 
于 2010-08-22T03:30:59.870 に答える
0

2番目と3番目の引数が入れ替わっているように見えますfwrite説明については、 fwriteのドキュメントを参照してください。

試す:

fwrite(sTemp, 1, size, fp);
于 2010-08-22T03:29:20.157 に答える