2009-06-14 13 views
19

C#.NETでは、URLからデータを取得し、バイナリ形式でファイルに保存したいと考えています。URLからデータを取得し、それをC#.NETのバイナリ形式でファイルに保存する方法

HttpWebRequest/Streamreaderを使用して文字列を読み込み、StreamWriterを使用して保存するとASCIIで正常に動作しますが、ASCII以外の文字は、エンコーディングを心配したり、Unicodeにエンコードしたり、

URLからデータを取得し、それをバイナリ形式のファイルに保存する最も簡単な方法は何ですか?

// This code works, but for ASCII only 
String url = "url..."; 
HttpWebRequest request = (HttpWebRequest) 
WebRequest.Create(url); 

// execute the request 
HttpWebResponse response = (HttpWebResponse) 
request.GetResponse(); 

// we will read data via the response stream 
Stream ReceiveStream = response.GetResponseStream(); 
StreamReader readStream = new StreamReader(ReceiveStream); 
string contents = readStream.ReadToEnd(); 

string filename = @"..."; 

// create a writer and open the file 
TextWriter tw = new StreamWriter(filename); 
tw.Write(contents.Substring(5)); 
tw.Close(); 

答えて

53

ミニマリストの答え:(匿名編集で提案されている)

using (WebClient client = new WebClient()) { 
    client.DownloadFile(url, filePath); 
} 

またはPowerShellで:

[System.Net.WebClient]::WebClient 
$client = New-Object System.Net.WebClient 
$client.DownloadFile(URL, Filename) 
+0

私はあなたに感謝しただけでパーフェクト! – jms

+0

gzippedファイルをダウンロードできたらいいですか? – Greg

+0

それだけではありません。 –

13

StreamReaderまたはTextWriterを使用しないでください。生のFileStreamでファイルに保存します。

String url = ...; 
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); 

// execute the request 
HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

// we will read data via the response stream 
Stream ReceiveStream = response.GetResponseStream(); 

string filename = ...; 

byte[] buffer = new byte[1024]; 
FileStream outFile = new FileStream(filename, FileMode.Create); 

int bytesRead; 
while((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0) 
    outFile.Write(buffer, 0, bytesRead); 

// Or using statement instead 
outFile.Close() 
+2

はしないでくださいoutFile.Close()を使用することを忘れないでください。 – Rios

+0

ありがとう、@リオス、追加(またはより良いまだ '使用して')。 –

0

これは私が使用するものです。

sUrl = "http://your.com/xml.file.xml"; 
rssReader = new XmlTextReader(sUrl.ToString()); 
rssDoc = new XmlDocument(); 

WebRequest wrGETURL; 
wrGETURL = WebRequest.Create(sUrl); 

Stream objStream; 
objStream = wrGETURL.GetResponse().GetResponseStream(); 
StreamReader objReader = new StreamReader(objStream, Encoding.UTF8); 
WebResponse wr = wrGETURL.GetResponse(); 
Stream receiveStream = wr.GetResponseStream(); 
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
string content = reader.ReadToEnd(); 
XmlDocument content2 = new XmlDocument(); 

content2.LoadXml(content); 
content2.Save("direct.xml"); 
関連する問題