Jan*_*cci 10 c# stream httpwebrequest httpwebresponse streamreader
我正在编写一个程序,需要.exe从网站下载文件,然后将其保存到硬盘驱动器.将.exe存储在我的网站,它的网址如下(这不是真正的URI只是一个我提出了对这个问题的目的):
http://www.mysite.com/calc.exe
Run Code Online (Sandbox Code Playgroud)
经过许多网络搜索和摸索示例之后,到目前为止,我已经提出了代码:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(http://www.mysite.com/calc.exe);
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream responseStream = webResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
string s = streamReader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用StreamReader该类来读取数据.调用之后ReadToEnd,流阅读器是否包含我的.exe的(二进制)内容?我可以只将文件的内容写入StreamReader文件(名为calc.exe),我会成功下载.exe吗?
我想知道为什么StreamReader ReadToEnd返回一个字符串.在我的情况下,这个字符串是否是calc.exe的二进制内容?
Dip*_*ipu 12
WebClient是下载文件的最佳方法.但您可以使用以下方法从Web服务器异步下载文件.
private static void DownloadCurrent()
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("[url to download]");
webRequest.Method = "GET";
webRequest.Timeout = 3000;
webRequest.BeginGetResponse(new AsyncCallback(PlayResponeAsync), webRequest);
}
private static void PlayResponeAsync(IAsyncResult asyncResult)
{
long total = 0;
long received = 0;
HttpWebRequest webRequest = (HttpWebRequest)asyncResult.AsyncState;
try
{
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult))
{
byte[] buffer = new byte[1024];
FileStream fileStream = File.OpenWrite("[file name to write]");
using (Stream input = webResponse.GetResponseStream())
{
total = input.Length;
int size = input.Read(buffer, 0, buffer.Length);
while (size > 0)
{
fileStream.Write(buffer, 0, size);
received += size;
size = input.Read(buffer, 0, buffer.Length);
}
}
fileStream.Flush();
fileStream.Close();
}
}
catch (Exception ex)
{
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一个类似的线程 - 如何使用HttpWebRequest和HttpWebResponse类(Cookies,凭证等)下载文件
StreamReader是一个文本阅读器实现,即它应该用于读取文本数据而不是二进制数据.在您的情况下,您应该直接使用底层响应流.
对于下载文件,最简单的方法是使用WebClient.DownloadFile方法.
| 归档时间: |
|
| 查看次数: |
61017 次 |
| 最近记录: |