DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

WebRequest、WebResponseクラスを使ってファイルをダウンロードし保存する

WebRequest、WebResponseクラスを使ってファイルをダウンロードし表示する」では、指定されたURL(URI)からデータをダウンロードする方法を説明しています。また、ダウンロードしたデータをファイルに書き込む方法は、「バイト型配列をファイルに書き込む」が参考になります。

このような方法により、「http://localhost/logo.gif」をダウンロードして、ファイルに保存する例を以下に示します。

VB.NET
コードを隠すコードを選択
'ダウンロードするファイル
Dim url As String = "http://localhost/logo.gif"
'保存先のファイル名
Dim fileName As String = "C:\test\logo.gif"

'WebRequestを作成
Dim webreq As System.Net.HttpWebRequest = DirectCast( _
    System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)

'サーバーからの応答を受信するためのWebResponseを取得
Dim webres As System.Net.HttpWebResponse = DirectCast( _
    webreq.GetResponse(), System.Net.HttpWebResponse)

'応答データを受信するためのStreamを取得
Dim strm As System.IO.Stream = webres.GetResponseStream()

'ファイルに書き込むためのFileStreamを作成
Dim fs As New System.IO.FileStream(fileName, _
    System.IO.FileMode.Create, System.IO.FileAccess.Write)

'応答データをファイルに書き込む
Dim readData As Byte() = New Byte(1023) {}
While True
    'データを読み込む
    Dim readSize As Integer = strm.Read(readData, 0, readData.Length)
    If readSize = 0 Then
        'すべてのデータを読み込んだ時
        Exit While
    End If
    '読み込んだデータをファイルに書き込む
    fs.Write(readData, 0, readSize)
End While

'閉じる
fs.Close()
strm.Close()
C#
コードを隠すコードを選択
//ダウンロードするファイル
string url = "http://localhost/logo.gif";
//保存先のファイル名
string fileName = "C:\\test\\logo.gif";

//WebRequestを作成
System.Net.HttpWebRequest webreq =
    (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);

//サーバーからの応答を受信するためのWebResponseを取得
System.Net.HttpWebResponse webres =
    (System.Net.HttpWebResponse)webreq.GetResponse();

//応答データを受信するためのStreamを取得
System.IO.Stream strm = webres.GetResponseStream();

//ファイルに書き込むためのFileStreamを作成
System.IO.FileStream fs = new System.IO.FileStream(
    fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);

//応答データをファイルに書き込む
byte[] readData = new byte[1024];
for (; ; )
{
    //データを読み込む
    int readSize = strm.Read(readData, 0, readData.Length);
    if (readSize == 0)
    {
        //すべてのデータを読み込んだ時
        break;
    }
    //読み込んだデータをファイルに書き込む
    fs.Write(readData, 0, readSize);
}

//閉じる
fs.Close();
strm.Close();
  • 履歴:
  • 2006/11/20 Read、Writeメソッドを使用した例を追加。
  • 2014/8/21 ReadByte、WriteByteメソッドを使用した例を削除など。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。