2009-06-19 6 views
0

URLDownloadToFileメソッド(urlmon.dllで定義)を使用してファイルをダウンロードするC++アプリケーション(this oneに似ています)が見つかりました。 IE8まで、プログレスコールバックにE_ABORTを返してダウンロードを中止することができました。IE8ボックスでURLDownloadToFileを使用する方法(クラッシュはうまくいかないでしょう)?

IE8がインストールされているシステムでは、プログラムがクラッシュし、エラーレポートが生成されます。

URLDownloadToFileからダウンロードしたダウンロードをキャンセルする方法はありますか?

+0

ところで、私の問題はkb969897によって解決されました。ありがとうございました – Vinzz

答えて

1

Joelこのような問題がありました。彼はそれをあきらめ、だまされました(転送をキャンセルするという不正行為の意味は、転送がユーザには見えなくなったが、それでもやり続けます)。 WinInetにはバグがありました...

+0

まあ、それはいたずらです!とにかく良いアイデアだと思う。ありがとう。 – Vinzz

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; 

これは私が現在使用しているものです - 私は、バッファを必要とします内容を含んでいますが、このコードを変更してファイルに書き込むのではなく、あまり問題にならないようにしてください。

+0

これらは統計情報で進捗報告をしていますか?それは私のアプリのために持っている必要があります。 – Vinzz

+0

私はあなたに私がそれをやる方法のアイデアを与えるために私の答えを修正しました – Alan

関連する問題