我是一个使用URLDownloadToFile
方法(在urlmon.dll中定义)下载文件的C ++应用程序(类似于this one)。
在IE8之前,可以通过在进程回调中返回E_ABORT
来中止下载。
在已安装IE8的系统上,这样做会导致程序崩溃,并生成错误报告。
是否有人知道取消通过URLDownloadToFile
启动的下载的替代方法?
答案 0 :(得分:1)
如果您正在使用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;
这就是我目前正在使用的 - 我需要一个包含内容的缓冲区,但是修改此代码以写入文件应该不会有太多问题。
答案 1 :(得分:1)
Joel有这样的问题。他放弃了并作弊(作弊意味着取消转移导致转移不再对用户可见,但仍然继续)。 WinInet有一个错误......