WebRequest、WebResponseクラスを使ってファイルをダウンロードし保存する「WebRequest、WebResponseクラスを使ってファイルをダウンロードし表示する」とほとんど変わりません。FileStreamクラスを使用して読み込んだデータを書き込むだけです。FileStreamについては、こちらをご覧ください。 次の例では、「http://localhost/logo.gif」をダウンロードし、ファイルに保存しています。 [VB.NET] 'ダウンロードするファイル Dim url As String = "http://localhost/logo.gif" '保存先のファイル名 Dim fileName as String = "c:\logo.gif" 'WebRequestの作成 Dim webreq As System.Net.HttpWebRequest = _ CType(System.Net.WebRequest.Create(url), _ System.Net.HttpWebRequest) 'サーバーからの応答を受信するためのWebResponseを取得 Dim webres As System.Net.HttpWebResponse = _ CType(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 b As Integer While True b = strm.ReadByte() If b = -1 Then Exit While fs.WriteByte(Convert.ToByte(b)) End While '閉じる fs.Close() strm.Close() [C#] //ダウンロードするファイル string url = "http://localhost/logo.gif"; //保存先のファイル名 string fileName = "c:\\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); //応答データをファイルに書き込む int b; while ((b = strm.ReadByte()) != -1) fs.WriteByte(Convert.ToByte(b)); //閉じる fs.Close(); strm.Close(); 上記のサンプルではReadByteメソッドで読み込み、WriteByteメソッドで書き込んでいるため、処理速度は遅いです。パフォーマンスを高めるためには、これらのメソッドの代わりにRead、Writeメソッドの使用や、非同期処理を検討してください。 Read、Writeメソッドを使用した例を以下に示します。 [VB.NET] '省略 '応答データをファイルに書き込む Dim readData(1023) As Byte Dim readSize As Integer = 0 While True readSize = strm.Read(readData, 0, readData.Length) If readSize = 0 Then Exit While End If fs.Write(readData, 0, readSize) End While '省略 [C#] //省略 //応答データをファイルに書き込む byte[] readData = new byte[1024]; int readSize = 0; for (;;) { readSize = strm.Read(readData, 0, readData.Length); if (readSize == 0) break; fs.Write(readData, 0, readSize); } //省略
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|