新規作成日 2017-10-25
最終更新日
WebClientクラスのOpenReadメソッドを使用すると、URLで指定したリソースをストリームとして取得することができます。
このコードでは、インターネットからファイルや画像などのリソースをストリームに読み込み、コンソールに表示します。
using System;
using System.IO;
using System.Net;
namespace GetWebsite02
{
class Program
{
static void Main(string[] args)
{
string url = @"https://vdlz.xyz/";
WebClient wc = new WebClient();
try
{
using (Stream stream = wc.OpenRead(url))
using(StreamReader sr = new StreamReader(stream))
{
// Add a user agent header in case the
// requested URI contains a query.
// 要求されたURIに、問合せが含まれる場合に備えて、
// ユーザー・エージェント・ヘッダを追加します。
wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
string str = sr.ReadToEnd();
Console.WriteLine(str);
}
}
catch(Exception e)
{
// Let the user know what went wrong.
// ユーザーに、何が問題になったのかを知らせます。
// The file could not be read:
Console.WriteLine("指定されたサイトを読み取れませんでした:");
Console.WriteLine(e.Message);
}
// Keep the console window open in debug mode.
// デバッグモードで、コンソール・ウインドウを開いた状態に維持します。
System.Console.WriteLine("何かキーを押すと終了します。");
System.Console.ReadKey();
}
}
}
このコードは、DownloadStringメソッドで紹介したコードと同じ結果がえられます。
ストリームに読み込む明確な理由はよくわかりませんが、処理速度に違いがある可能性がありますので、大量にインターネット上のリソースを処理する場合は、ストリームを使う場合と、使わない場合で、処理速度の比較をしたほうがよいかと思います。
usingステートメントのネスト
この例では、usingが2種類の方法で使用されています。コードの先頭で使用する名前空間を宣言しているのは、usingディレクティブ、 コードの途中で、自動的に自動的にDispose()メソッドを呼び出すために使用されているものが、usingステートメントです。
この例のように、usingステートメントがネストしている場合は、外側の括弧を省略できます。
using (Stream stream = wc.OpenRead(url))
using(StreamReader sr = new StreamReader(stream))
{
...
}