CAsyncMonikerFileの使い方を教えて下さい – プログラミング – Home

通知
すべてクリア

[解決済] CAsyncMonikerFileの使い方を教えて下さい


くろ
 くろ
(@くろ)
ゲスト
結合: 25年前
投稿: 14
Topic starter  

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

ダウンロードに成功したケース(ファイル)は

です。
http://www.ffe.or.jp/home/market/WeekData/broiler.csv
http://www.google.co.jp/index.html

はアサートが出てしまいました。初めはファイル形式が原因かと思ったのですが、
同じ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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

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

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

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


返信引用
くろ
 くろ
(@くろ)
ゲスト
結合: 25年前
投稿: 14
Topic starter  

回答ありがとうございます。
頂いた情報の通り CInternetSession を使用したところ無事DLする事ができました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました