我有一个 C++ 应用程序(类似于这个),它使用URLDownloadToFile
方法(在 urlmon.dll 中定义)下载文件。E_ABORT
在 IE8 之前,可以通过在进度回调中返回来中止下载。
在安装了 IE8 的系统上,这样做会使程序崩溃,并生成错误报告。
有谁知道取消通过 启动的下载的任何替代方法URLDownloadToFile
?
我有一个 C++ 应用程序(类似于这个),它使用URLDownloadToFile
方法(在 urlmon.dll 中定义)下载文件。E_ABORT
在 IE8 之前,可以通过在进度回调中返回来中止下载。
在安装了 IE8 的系统上,这样做会使程序崩溃,并生成错误报告。
有谁知道取消通过 启动的下载的任何替代方法URLDownloadToFile
?
如果您使用的是 MFC,您是否考虑过使用 CInternetSession 和 CHttpFile?
我正在使用这些没有任何问题(已安装 IE8)
我正在使用的快速代码片段:
CInternetSession internetSession;
CHttpFile *pHttpFile =
reinterpret_cast< CHttpFile* >( internetSession.OpenURL( L"www.example.com" ) );
DWORD dwStatusCode;
if ( pHttpFile->QueryInfoStatusCode( dwStatusCode ) &&
dwStatusCode == HTTP_STATUS_OK )
{
char szBuffer[ BUFFER_SIZE ];
DWORD dwBufferIndex = 0;
DWORD dwBytesRead = (DWORD)pHttpFile->Read( &szBuffer[ dwBufferIndex ], CHUNK_SIZE );
while ( dwBytesRead > 0 && dwBufferIndex < BUFFER_SIZE )
{
dwBufferIndex += dwBytesRead;
// break out if cancelled
if ( m_bCancel )
break;
dwBytesRead = (DWORD)pHttpFile->Read( &szBuffer[ dwBufferIndex ], CHUNK_SIZE );
}
szBuffer[ dwBufferIndex ] = '\0';
// szBuffer now contains the file contents
}
pHttpFile->Close();
delete pHttpFile;
这就是我目前正在使用的 - 我需要一个包含内容的缓冲区,但是修改此代码以写入文件应该不是什么大问题。
乔尔有这样的问题。他放弃了它并作弊(作弊意味着取消转移导致用户不再看到转移,但仍然继续进行)。WinInet 有一个错误...