お世話になります
環境と道具は Windows Vista VC++2008 Pro C++/CLR Windowsフォームアプリケーショ
ンです
動的なページを途中経過を表示しながらダウンロードしようとしているのですが
うまくいかなのでご教示いただきたくお伺いします
フォームにはbutton1とlabel1を配置しました
コードはMSDNを参考に寄せ集めて末尾のとおりつくりました
URI( http://www.yahoo.co.jp/)とローカルのフルパスは解決するまで固定していま
す
YJ(YahooJapan )は動的なページではありますが
サイズはだいたい85~105KBです(OS付属のダウンロードダイアログでたしか
めました)
ところが末尾記載のコードを走らせますと結果は25~35KBです
エラーメッセージはでませんが ダウンロードしたファイルを起動し開きますと
文字の色合いなどちがいますので ダウンロードは正しくないと言えると思います
そこで お伺いしたいのはどこに原因があると考えられますでしょうか
なお HttpWebRequestやHttpWebResponseなど使っても同様でした
(先頭からここまで省略)
#pragma endregion
private: System::Void button1_MouseClick(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e)
{
WebClient^ wc = gcnew WebClient();
wc->DownloadFileCompleted += gcnew AsyncCompletedEventHandler
(this, &Form1::_DownloadFileCompleted);
wc->DownloadProgressChanged += gcnew
System::Net::DownloadProgressChangedEventHandler(this,
&Form1::_DownloadProgressChanged);
wc->DownloadFileAsync(gcnew Uri
( http://www.yahoo.co.jp/), D:\\ZZZ\\yahoo.html);
}
void Form1::_DownloadFileCompleted(System::Object ^sender,
AsyncCompletedEventArgs ^e)
{
MessageBox::Show(Download completed);
}
void Form1::_DownloadProgressChanged(System::Object ^sender,
System::Net::DownloadProgressChangedEventArgs ^e)
{
label1->Text = e->BytesReceived.ToString();
}
Asyncではなくて同期ダウンロードだとどうです?
WebClient がローカル変数なので、ダウンロードが終わる前に WebClient が死んでると
か…。
ご回答ありがとうございます
>Asyncではなくて同期ダウンロードだとどうです?
同期でもダウンロードされるバイト数はかわりません
その上 同期ですとDownloadProgressChangedのイベントが発生しないようです
送り側 (Yahoo 側) が UA を見て CSS あたりを作り分けてるとか
私もtetrapodさんの意見に一票。
ご回答ありがとうございます
>送り側 (Yahoo 側) が UA を見て CSS あたりを作り分けてるとか
UAはUser-Agentのことでしょうか
UA は User Agent のこと
CSS は Cascading Style Sheet のこと
文字の色合いが違う=色指定が違う= CSS が違うと見たわけだが、
本当に UA ごとに CSS など (CSS だけに限る気はない) が違うかどうかの検証は
していないし、する気も無いのであしからず
UA変えてアクセスしてみたらFirefoxでも内容が違うこと確認したよ。
「WebClient User Agent」でグーグル先生に聞いてみました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/302wcget/wcget.html
ページ後半の「Headersプロパティによるヘッダ情報の追加」のところに対処法が書いて
あります。
wclrp ( 'o') さん subaru さん
うまくいきました
ありがとうございました
特に subaru さんの具体的なご教示は
大変助かりました