本文整理汇总了C++中CHttpFile::SeekToEnd方法的典型用法代码示例。如果您正苦于以下问题:C++ CHttpFile::SeekToEnd方法的具体用法?C++ CHttpFile::SeekToEnd怎么用?C++ CHttpFile::SeekToEnd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CHttpFile
的用法示例。
在下文中一共展示了CHttpFile::SeekToEnd方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DownloadHprose
std::string CallHprose::DownloadHprose( std::string strHproseDownloadUrl, std::string strFileDir, std::string strFileName )
{
CInternetSession sess;
CHttpFile* pHttpFile;
try
{
pHttpFile=(CHttpFile*)sess.OpenURL(strHproseDownloadUrl.c_str());
}
catch(CException* e)
{
pHttpFile = 0;
TCHAR msg[1024];
memset(msg, 0, 1024);
e->GetErrorMessage(msg, 1023, NULL);
ZTools::WriteZToolsFormatLog("打开URL失败:%s", msg);
return "";
}
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = pHttpFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
int nReadBlockSize = 256*1024;
char* pBuffer = new char[nReadBlockSize];
if( bSuccess && dwStatus>= 200&& dwStatus<300 )
{
if (strFileName.length() == 0)
{
CString sContentDisposition;
DWORD dwIndex = 0;
bSuccess = pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_DISPOSITION, sContentDisposition, &dwIndex);
std::string strContentDisposition((LPCTSTR)sContentDisposition);
std::string strKeyBegin("filename=\"");
std::string strKeyEnd("\"");
if (!strContentDisposition.empty())
{
size_t nBegin = strContentDisposition.find(strKeyBegin) + strKeyBegin.length();
if (nBegin < strContentDisposition.length())
{
size_t nEnd = strContentDisposition.find(strKeyEnd, nBegin);
strFileName = strContentDisposition.substr(nBegin, nEnd - nBegin);
}
strFileName = deescapeURL(strFileName);
ZTools::UTF8ToMB(strFileName);
}
}
if (strFileName.length() == 0)
{
delete[] pBuffer;
pBuffer = NULL;
pHttpFile->Close();
//delete pHttpFile;
sess.Close();
ZTools::WriteZToolsFormatLog("没有找到文件名");
return "";
}
std::replace(strFileDir.begin(), strFileDir.end(), '/', '\\');
strFileDir.erase(strFileDir.find_last_not_of('\\') + 1);
std::replace(strFileName.begin(), strFileName.end(), '/', '\\');
strFileName.erase(0, strFileName.find_first_not_of('\\'));
std::string strFilePath = ZTools::FormatString("%s\\%s", strFileDir.c_str(), strFileName.c_str());
//先下载到临时文件中,下载成功后重命名
std::string strFilePathTemp = ZTools::FormatString("%s\\%s", strFileDir.c_str(), GuidToString(CreateGuid()).c_str());
if (!MakeSureDirectoryPathExists(strFilePath.c_str()))
{
delete[] pBuffer;
pBuffer = NULL;
pHttpFile->Close();
//delete pHttpFile;
sess.Close();
ZTools::WriteZToolsFormatLog("创建文件夹失败:%s", strFilePath.c_str());
return "";
}
CFile fileWrite;
ULONGLONG dwFileLen = 0;
DWORD dwWriteIndex = 0;
dwFileLen = pHttpFile->SeekToEnd();
pHttpFile->SeekToBegin();
if(fileWrite.Open(strFilePathTemp.c_str(), CFile::modeWrite|CFile::modeCreate))
{
int nCount = 0;
while(dwWriteIndex < dwFileLen)
{
nCount = pHttpFile->Read(pBuffer, nReadBlockSize);
fileWrite.Write(pBuffer, nCount);
dwWriteIndex += nCount;
}
fileWrite.Close();
rename(strFilePathTemp.c_str(), strFilePath.c_str());
delete[] pBuffer;
pBuffer = NULL;
pHttpFile->Close();
delete pHttpFile;
//.........这里部分代码省略.........