>>>>>>>> 编写文件下载程序遇到的奇怪问题,高分请教~~~~~
请看下面的代码(是一个出自Codeguru的标准函数)
CString GetFile(const char *url, const char *filename)
{
#define HTTPBUFLEN 512 // Size of HTTP Buffer...
char httpbuff[HTTPBUFLEN];
TCHAR szCause[255];
CString Cause;
Cause.Format("YES");
TRY
{
CInternetSession mysession;
CStdioFile *remotefile = mysession.OpenURL(url,1,INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_RELOAD);
CFile myfile(filename, CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
int numbytes;
///////////////////////////////////////////////////////////////////////
这里的缓冲区HTTPBUFLEN现在设为512个字节(设成其它的也一样)每次读取的数据是HTTPBUFLEN个字节,当所读取的文件剩下的字节数小于HTTPBUFLEN时,也就是最后一次调remotefile->Read时,remotefile->Read这句调用就阻塞住了,换不同的文件,不同大小,不同的缓冲区设置,都是这样的情况,屡试不爽。当前系统是2000,换另外一个98系统,一点问题都没有,文件顺利下载,回到2000,又是下载到最后的时候阻塞住了。另外还试了CHttpFile和InternetReadFile等其他的方法来下载文件,也都是这个问题:在最后一次Read的时候阻塞住了!有谁遇到过这样的情况?为什么另一个98系统下面都没有问题?高分请教!
#############问题出在下面这句话这里
///////////////////////////////////////////////////////////////////////
while (numbytes = remotefile->Read(httpbuff, HTTPBUFLEN))
myfile.Write(httpbuff, numbytes);
remotefile->Close();
mysession.Close();
}
CATCH_ALL(error)
{
error->GetErrorMessage(szCause,254,NULL);
Cause.Format("%s",szCause);
}
END_CATCH_ALL;
return (Cause);
}