gpt4 book ai didi

c++ - WinINet 无法将文件下载到客户端?

转载 作者:太空宇宙 更新时间:2023-11-04 07:41:32 25 4
gpt4 key购买 nike

我很好奇为什么我在使用此功能时遇到问题。我正在将网络上的 PNG 文件下载到目标路径。例如下载谷歌图片到C:盘:

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

下载后文件大小正确。没有返回错误。当我尝试打开它时,它不会显示图像。任何想法都是有帮助的。谢谢!

代码如下:

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

最佳答案

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);

关于c++ - WinINet 无法将文件下载到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3539951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com