用DownloadFile下载文件的问题

hzsummer 2006-12-25 12:56:58
try
{
//textBox2.AppendText(PnStr + "_" + PageNo + ".tif 开始重新下载\r\n");
client.DownloadFile(OriUri, DownFileName);

Stream str = client.OpenRead(OriUri);

//StreamReader reader = new StreamReader(str);
byte[] mbyte = new byte[100000];
int allmybyte = (int)mbyte.Length;
int startmbyte = 0;
//textBox2.AppendText("正在接收数据..." + PnStr + "_" + PageNo + ".tif\r\n");
while (allmybyte > 0)
{
int m = str.Read(mbyte, startmbyte, allmybyte);
if (m == 0)
break;
startmbyte += m;
allmybyte -= m;
}

FileStream fstr = new FileStream(DownFilePath, FileMode.OpenOrCreate, FileAccess.Write);
fstr.Write(mbyte, 0, startmbyte);
str.Close();
fstr.Close();
//textBox2.AppendText(PnStr + "_" + PageNo + ".tif 数据下载完成\r\n");
}
catch (WebException exp)
{
MessageBox.Show(exp.Message, "Error");
}


这是我看到的一段下载文件的代码,我觉得奇怪的是client.DownloadFile(OriUri, DownFileName);就可以下载文件了,为什么还要后面写入流再保存,是不是多此一举呢,另外,直接保存和写入流效率是不是一样的?有没有通过压缩文件的方式来下载文?
谢谢!!!
...全文
2758 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzsummer 2006-12-25
  • 打赏
  • 举报
回复
ok,多谢各位
cancerser 2006-12-25
  • 打赏
  • 举报
回复
以我的知识,压缩只能在服务器端完成
目前我所知道的解决办法只能是,通知服务器要下载的文件,然后让服务器给你打包后告诉你地址(可以用aspx访问,或webService),你在下载,下载后解包.
打包和解饱的代码都得自己添,也可以打成象rar那样的自解压文件
hzsummer 2006-12-25
  • 打赏
  • 举报
回复
多谢多谢,另外我再问一下,有没有什么办法可以把文件压缩、再下载、然后解开的办法?
cancerser 2006-12-25
  • 打赏
  • 举报
回复
你说的没错,client.DownloadFile就可以了
用流只不过方便自己控制进度罢了,
明显写重了
hzsummer 2006-12-25
  • 打赏
  • 举报
回复
我的疑问就是:client.DownloadFile(OriUri, DownFileName); 这个函数可以直接保存到某个路径的,还需要再用流来写文件吗?我想DownloadFile应该也是用流来下载文件的吧?
cancerser 2006-12-25
  • 打赏
  • 举报
回复
WebClient DownFile=new WebClient();
str =DownFile.OpenRead(url);
byte[] mbyte = new byte[1024];
int readL=str.Read(mbyte,0,1024);
fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.Write);
//读取流
while(readL!=0)
{
if(stopDown)
break;
fs.Write(mbyte,0,readL);//写文件
readL=str.Read(mbyte,0,1024);//读流
}
str.Close();
fs.Close();
cancerser 2006-12-25
  • 打赏
  • 举报
回复
while (allmybyte > 0)
{
int m = str.Read(mbyte, startmbyte, allmybyte);
if (m == 0)
break;
startmbyte += m;
allmybyte -= m;
}//怎么这么奇怪呢?
hzsummer 2006-12-25
  • 打赏
  • 举报
回复
连续下载文件,第一个都可以第二个就提示超时,怪。
winner2050 2006-12-25
  • 打赏
  • 举报
回复
小文件直接用DownloadFile得了,下载大的文件需要用到Stream的那种风格,因为高手可以优化文件下载,比如到下一定程度就写一次硬盘,不是DownloadFile那样先放内存里面,下载完再写硬盘。

如果那样的话下载1g的东西死得人的。

DownloadFile用来作采集网页、图片得可以用。如果连人家的软件都用这个采集那么就惨了。

110,536

社区成员

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

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

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