我可以下载文本文档(.html,.txt等)但我无法下载图像或exe文件。我很确定这是因为我使用的是char,而这些文件是二进制文件。我知道在C#中我会使用一个字节。但是在这种情况下我会使用什么数据类型?
char buffer[1];
DWORD dwRead;
FILE * pFile;
pFile = fopen(file,"w");
while (InternetReadFile(hRequest, buffer, 1, &dwRead))
{
if(dwRead != 1) break;
fprintf(pFile,"%s",buffer);
}
fclose(pFile);
答案 0 :(得分:4)
您的问题不是char,它使用的是带有%s的fprintf。 char
可以保存所有字节值。当二进制数据块中包含\0
(NULL)字符时,fprintf将在此时停止输出数据。
您希望在这种情况下使用fwrite
。
在Windows中,打开二进制文件时使用b
说明符也很重要。
答案 1 :(得分:2)
由于您一次只读取一个字节到非空终止的缓冲区(因为它的大小为1),因此您需要一次输出一个字节,并使用“%c
”作为格式字符串或使用putc(buffer[0], pFile)
。就目前而言,您很容易受到缓冲区溢出的影响(因为可能会发生不好的事情!)。
如果您使用的是Windows平台,最好以二进制模式打开文件;因为二进制和文本模式之间没有区别,所以它对Unix没有任何影响。