• ベストアンサー

C#でストリームの保存の仕方

以下のコードのストリームstの保存を行いたいのですが、Streamのインスタンスをnewで作れないので どのようにすればよいでしょうか。お願いします。 HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create("http://www.***.co.jp"); HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse(); Stream st = webres.GetResponseStream();

質問者が選んだベストアンサー

  • ベストアンサー
  • akarin6_6
  • ベストアンサー率59% (13/22)
回答No.1

やりたいことが良く分かりませんが、StreamReaderを使えば変数に格納したり、ファイルに保存したりできますよ。 //StreamReaderのインスタンス作成 System.IO.StreamReader sr = new System.IO.StreamReader(st, enc); //受信して表示 string html = sr.ReadToEnd(); Console.WriteLine(html);

ii_oniku
質問者

補足

どうもありがとうございます。最終的にはHttpWebResponse.GetResponseStream()でStreamクラスを得てStreamReader(Stream).ReadToEnd()でHTMLを読み出しmetaタグで設定されているエンコーディングを取得して、ふたたびStreamReader(Stream, Encoding)のようにEncodingを指定して文字化けの無い正しいHTML文を得たいと思っています。 1回目のStreamReaderのコンストラクタではエンコーディングは無指定で、metaタグ部のエンコーディング指定を読み出し、2回目のStreamReaderのコンストラクタで正しくエンコーディングを指定するという形になります。 Streamを2回使いたいのでSreamの形で別変数に保存ができないかと思っています。StreamはSeekやPosition、newが使えないということもあり、どうすればよいか悩んでおります。 ファイル保存するというのは処理コストが高くなるのでなるべくは避けたいと思っています。また上記の方法だとmetaタグでエンコーディングの指定が無い場合はコケますが、それはそれでよいと思っています。 C#初心者のために分からない点も多く、もっとよい方法があればご教授お願いいたします。

その他の回答 (1)

  • akarin6_6
  • ベストアンサー率59% (13/22)
回答No.2

私も初心者なので、パッとソース提示なんかは出来ませんが・・・。 最初のStreamをHTMLソースのcharsetが出てくるまで読み込んで、用が済んだら新たなStreamでエンコードを指定して読み込むというのではダメでしょうか? metaでcharset指定があれば最初のStreamは数行を読み込む程度で負荷も少ないかと。 変数に格納してしまうとUTF-8になってしまうのでダメですね。 あとはByte型で取り込んで変換などの処理をすれば上手く行くんでしょうかね。 ズバリ回答できなくて申し訳ありません。

ii_oniku
質問者

お礼

どうもありがとうございます。参考にしてもう少し取り組んでみます。それでもダメならGotDotNetでも同じ質問をしてみます。

関連するQ&A

専門家に質問してみよう