CAsyncMonikerFileの使い方を教えて下さい

[戻る]
くろ 2002/10/12(土) 09:13:10
初めまして。
CAsyncMonikerFileを使ってファイルのダウンロードを行いたいのですが、
ダウンロードに成功するケースとアサートが出るケースがあるのです。
下記コードの DownClass.Read(str,1024) を実行した際にRead関数内の
ASSERT(m_lpStream != NULL); に引っかかってしまいます。

ダウンロードに成功したケース(ファイル)は
http://www.google.co.jp/images/hp0.gif
です。
http://www.ffe.or.jp/home/market/WeekData/broiler.csv
http://www.google.co.jp/index.html
http://www.ffe.or.jp/home/images/report.gif
はアサートが出てしまいました。初めはファイル形式が原因かと思ったのですが、
同じgif画像でもサイトによって成功失敗の違いがあるのでそうでは無い様です。
一度アサートを無視すれは一応その後は動作するのですが、リリース版だと即死なので何とか直
したいのです。

手順の間違い等、何か原因がありましたら教えて頂ければ幸いです。宜しくお願いします。
以下コードです。

#include <afxole.h>
bool DownLoad()
{
    UINT uSize = 0;
    char str[1024];
    memset(str,0,sizeof(char)*1024);

    TRY
    {
        CAsyncMonikerFile DownClass; //ダウンロード用
        BOOL bResult = DownClass.Open
("http://www.ffe.or.jp/home/market/WeekData/broiler.csv");
        CFile WriteClass; //ファイル保存用
        WriteClass.Open("C:\\test.csv",CFile::modeCreate| 
CFile::modeReadWrite);
        while(1)
        {
            uSize = DownClass.Read(str,1024);
            if(uSize == 0)
            {
                WriteClass.Flush();
                break;
            }
            if(uSize < 1024)
            {
                WriteClass.Write(str,uSize);
                WriteClass.Flush();
                break;
            }
            WriteClass.Write(str,uSize);
            memset(str,0,sizeof(char)*1024);
        }
        WriteClass.Flush();
        WriteClass.Close();
        DownClass.Close();
    }
    CATCH(CFileException, e)
    {
        return false;
    }
    AND_CATCH(CMemoryException, e)
    {
        return false;
    }
    END_CATCH

    return true;
}

dairygoods 2002/10/15(火) 11:04:00
CAsyncMonikerFileは、非同期にデータをダウンロードするためのクラスですが、
その辺りは認識しておりますでしょうか?
(つまり、Open関数から戻ってもファイルを開く処理が
 終わっているとは限りません。)

もし、非同期で読込む必要がないのであれば、CInternetSession::OpenURL()
を使ってみてください。

非同期での読込みを行いたいのであれば、CAsyncMonikerFileのヘルプから
辿れる「インターネット実用編 : 非同期モニカ」のところに
このクラスを使って読み込む方法が書かれています。

くろ 2002/10/16(水) 00:57:02
[[解決]]
回答ありがとうございます。
頂いた情報の通り CInternetSession を使用したところ無事DLする事ができました。

古いスレッドには追加発言できません。