WebClientを使ってバイナリデータをダウンロードする

WebClientクラスを使ってURLが指すバイナリデータをダウンロードする場合などに使えます。

ウェブ上のデータの読み込みが完了するとOpenReadCompletedイベントが発生しますのでイベントハンドラを追加して、OpenReadAsyncメソッドで指定したリソースへのストリームを開きます。

// ファイルをバイナリとして保存する
private void button4_Click(object sender, RoutedEventArgs e) {
    // ダウンロードを開始する
    var client = new WebClient();
    client.OpenReadCompleted += client_OpenReadCompleted;
    client.OpenReadAsync(new Uri("http://ch3cooh.jp/wp-content/uploads/2011/04/icon991.png"));
}

ウェブ上のリソースがダウンロード可能な状態になると、以下のイベントハンドラが呼び出されます。リソースを読み込みながら分離ストレージに書き込み処理をおこなっています。

// ウェブ上のリソースをダウンロード出来るようになると通知されるイベントハンドラ
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) {
    // エラーチェック
    if (e.Error != null) {
        return;
    }
 
    // ダウンロードしたデータを分離ストレージに保存する
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    using (var strmWriter = store.CreateFile("icon991.png")) {
 
        var bytes = new byte[128];
        int readed = 0;
        while (true) {
            // ダウンロードデータを読み込む
            readed = e.Result.Read(bytes, 0, bytes.Length);
            if (readed == 0) break;
            // 分離ストレージへ書き出し
            strmWriter.Write(bytes, 0, readed);
        }
    }
}