0

我有一个 C++ 应用程序(类似于这个),它使用URLDownloadToFile方法(在 urlmon.dll 中定义)下载文件。E_ABORT在 IE8 之前,可以通过在进度回调中返回来中止下载。

在安装了 IE8 的系统上,这样做会使程序崩溃,并生成错误报告。

有谁知道取消通过 启动的下载的任何替代方法URLDownloadToFile

4

2 回答 2

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;

这就是我目前正在使用的 - 我需要一个包含内容的缓冲区,但是修改此代码以写入文件应该不是什么大问题。

于 2009-06-19T15:09:48.873 回答
1

乔尔有这样的问题。他放弃了它并作弊(作弊意味着取消转移导致用户不再看到转移,但仍然继续进行)。WinInet 有一个错误...

于 2009-06-19T15:20:15.267 回答