关于用HttpWebRequest下载文件的问题

pclsprest 2010-11-18 11:44:29
我想用HttpWebRequest下载web服务器上的ppt文件,(HttpWebResponse)request.GetResponse()得到的流.怎么才能还原成ppt文件呢?现在我保存出来的文件,总是打不开
...全文
737 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
你的青苹果 2011-07-19
  • 打赏
  • 举报
回复
我也用到这个东西了,麻烦问一下,你上面所说的没读取完,如何才能完整啊!
CSDN上也有示例代码:
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader( receiveStream, encode );
Console.WriteLine("\r\nResponse stream received.");
Char[] read = new Char[256];
int count = readStream.Read( read, 0, 256 );
Console.WriteLine("HTML...\r\n");
while (count > 0)
{
String str = new String(read, 0, count);
Console.Write(str);
count = readStream.Read(read, 0, 256);
}
Console.WriteLine("");
myHttpWebResponse.Close();
readStream.Close();
pclsprest 2010-11-19
  • 打赏
  • 举报
回复
知道错在哪里了..读取返回流的时候出错了.没读取完,呵呵
  • 打赏
  • 举报
回复
奇怪,前边少了一句话,是关于“流”概念的。
  • 打赏
  • 举报
回复
再说,不要胡乱指定GB2312,并且也不应该使用TextReader,网站只是下载一个文件内容流,也就是说文件每一个字节忠实地传递过来,你在客户端用个专门为接收字符串(并且还指定GB2312)的机制当然是画蛇添足了。如果一定要写这么多代码,那么使用 receive.Read 然后固定的buffer大小一块一块地循环下载然后写入 fs 就行了,中间跟TextReader、Encoding没有关系。

实际上调用WebClient的DownloadFile静态方法,写一句话就行了。
pclsprest 2010-11-18
  • 打赏
  • 举报
回复
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://192.168.0.107:82/ppt2010.rar");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
FileStream fs = new FileStream(@"D:\aaa.rar", FileMode.OpenOrCreate, FileAccess.Write);
Stream receive = response.GetResponseStream();
BinaryReader sr = new BinaryReader(receive, Encoding.GetEncoding("GB2312"));
char[] content = new char[response.ContentLength];
sr.Read(content, 0, content.Count());
BinaryWriter sw = new BinaryWriter(fs);
sw.Write(content);
fs.Flush();
fs.Close();
receive.Close();

这么做的
  • 打赏
  • 举报
回复
谁知道你是怎么做的?
pclsprest 2010-11-18
  • 打赏
  • 举报
回复
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://192.168.0.107:82/ppt2010.ppt");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
FileStream fs = new FileStream(@"D:\aaa.ppt", FileMode.OpenOrCreate, FileAccess.Write);
Stream receive = response.GetResponseStream();
byte[] b = new byte[response.ContentLength];
receive.Read(b, 0, b.Count());
fs.Write(b, 0, b.Count());
fs.Flush();
fs.Close();
这么也不对request.GetResponse()返回的流里边是不是还包含HTTP的什么信息?还用把它们去掉吗
pclsprest 2010-11-18
  • 打赏
  • 举报
回复
WebClient 这个我知道,但我要做的是在wince上跑的,net cf里边没有这个类,只能用WebRequest来做,开始我也没指定什么编码格式,直接用是StreamReader来读,不对才加上的.我先试试你说的,谢谢了

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧