wininet 文件大小获取问题!
AfxParseURL(FileURL, dwType, strServer, strObject, nPort);
pHttpConn = Session.GetHttpConnection(strServer,nPort);
pHttpFile = pHttpConn->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject,0,1,0,0,NULL);
if (pHttpFile->SendRequest() == FALSE)
{
ThreadList->SetItemText(Item,3,_T("下载失败"));
return 0;
}
DWORD dwStateCode;
pHttpFile->QueryInfoStatusCode(dwStateCode);
if (dwStateCode == HTTP_STATUS_OK)
{
HANDLE hFile = CreateFile(FilePath, GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
NULL); // 创建本地文件
if (hFile == INVALID_HANDLE_VALUE)
{
pHttpFile->Close();
pHttpConn->Close();
Session.Close();
ThreadList->SetItemText(Item,3,_T("文件创建失败"));
return 0;
}
char szInfoBuf[128] = {0}; //返回的消息
DWORD dwFileSize = 0; //文件长度
DWORD dwInfoBufsize = 100;
BOOL bResult = FALSE;
bResult = pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,
(LPVOID)szInfoBuf,&dwInfoBufsize,NULL);
dwFileSize = atol(szInfoBuf);
const int BUFFER_LEBGTH = 1024;
pszBuffer = new char [BUFFER_LEBGTH];//读取文件的缓冲
DWORD dwWrite,dwTotalWrite;
dwWrite = dwTotalWrite = 0;
UINT nRead = pHttpFile->Read(pszBuffer,BUFFER_LEBGTH - 1); //读取服务器上的数据
while(nRead > 0)
{
if (m_dwStop == ThreadList->GetItemData(Item))
{
AfxMessageBox(_T("终止等待中的线程!"));
TerminateThread((HANDLE)m_dwStop,0);
delete lpParam;
return 0;
}
WriteFile(hFile,pszBuffer,nRead,&dwWrite,NULL); //写到本地文件
dwTotalWrite += dwWrite;
DWORD dwPercent = (dwTotalWrite*100)/dwFileSize;
CString strPercent ;
strPercent.Format(_T("%d%%"),dwPercent);
ThreadList->SetItemText(Item,4,strPercent);
nRead = pHttpFile->Read(pszBuffer,BUFFER_LEBGTH - 1);
}
上面红色部分为什么不能正确显示下载文件的大小 以及已经下载的百分比。
以上代码能够正确下载文件,文件能够正常打开!
更新:
跟踪看了下,看到szInfoBuf[]里面确实获得了文件的大小。
但是是szInfoBuf[0],szInfoBuf[2],szInfoBuf[4]。。。。才有值
这样通过atol转换的时候只取了第一个值。
问题要如何解决