web-dev-qa-db-ja.com

URLからデータを取得し、エンコードの混乱なしにC#.NETでバイナリ形式のファイルに保存する方法は?

C#.NETで、URLからデータをフェッチしてバイナリ形式でファイルに保存したい。

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();
21
jms

シンプルな答え:

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

またはPowerShellで(匿名の編集で推奨):

[System.Net.WebClient]::WebClient
$client = New-Object System.Net.WebClient
$client.DownloadFile($URL, $Filename)
56
Marc Gravell

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()
14

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

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");
0
Aviatrix