求助C#文件下载的问题

我写了一段代码用于文件下载,可是每次只能下载到19.9KB就显示完成,文件至少几十MB,不知道何故?麻烦达人修改一下。代码如下:usingSystem.IO;usingS... 我写了一段代码用于文件下载,可是每次只能下载到19.9KB就显示完成,文件至少几十MB,不知道何故?麻烦达人修改一下。

代码如下:
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
private static WebClient client = new WebClient();
private static StreamWriter writer = null;
private static Thread thThread;
private static string url;
private static string app;
private static string website;
private static string filename;

private static void StartDownload()
{
string URL = app;
int n = URL.LastIndexOf("/");
string URLAddress = URL.Substring(0, n);
string fileName = URL.Substring(n + 1, URL.Length - n - 1);
string Dir = Environment.CurrentDirectory;
string Path = Dir.ToString() + "\\" + fileName;
try
{
WebRequest myre = WebRequest.Create(URLAddress);
}
catch (WebException exp)
{
Process.Start(@"C:\Program Files\Internet Explorer\iexplore.exe", website);
}
try
{
//statusStrip1.Text = "开始下载文件...";
client.DownloadFile(URLAddress, fileName);
Stream str = client.OpenRead(URLAddress);
StreamReader reader = new StreamReader(str);
//statusStrip1.Text = "正在接收数据...";
FileStream fstr = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.Write);
writer = new StreamWriter(fstr);
while (reader.Peek() >= 0)
{
char[] c = new char[10240];
reader.Read(c,0, c.Length);
writer.Write(c);
}
writer.Flush();
str.Close();
fstr.Close();
//statusStrip1.Text = "下载完毕!";
MessageBox.Show("下载完毕");
}
catch (WebException exp)
{
MessageBox.Show(exp.Message, "Error");
//statusStrip1.Text = "";
}
url = "\\JDK6.url";
app = "http://www.java.net/download/jdk6/6u10/promoted/b28/binaries/jdk-6u10-rc-bin-b28-windows-i586-p-21_jul_2008.exe";
website = "http://java.sun.com/";
filename = "JDK6.exe";
StartDownload();
展开
 我来答
dkxpsg
推荐于2016-05-10 · TA获得超过1628个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:1048万
展开全部

直接用WebClient下载不就行了吗,干嘛还要定义一个WebRequest如下

using System.Net;

  WebClient web = new WebClient();

        private void button1_Click(object sender, EventArgs e)//下载

        {

            string app = "http://www.java.net/download/jdk6/6u10/promoted/b28/binaries/jdk-6u10-rc-bin-b28-windows-i586-p-21_jul_2008.exe";;

            string filename = "D:\\JDK6.exe";

            web.DownloadFileCompleted += new AsyncCompletedEventHandler(web_DownloadFileCompleted);

            web.DownloadProgressChanged += new DownloadProgressChangedEventHandler(web_DownloadProgressChanged);

            web.DownloadFileAsync(new Uri(app), filename);

        }

        private void button2_Click(object sender, EventArgs e)//取消

        {

            web.CancelAsync();

        }

        void web_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)

        {

            label1.Text = string.Format("开始下载文件... 已下载:{0}Mb 剩余:{1}Mb 已完成:{2}%",

                e.BytesReceived / 1024 / 1024,

                e.TotalBytesToReceive / 1024 / 1024,

                e.ProgressPercentage.ToString("N2"));

        }

        void web_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)

        {

            if (e.Cancelled)

                label1.Text = "下载取消";

            else

                label1.Text = "下载完毕";

        }

百度网友451206a
2010-04-26 · TA获得超过1815个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:467万
展开全部
你把下载下来的19.9K的文件,改成 .html, 用ie,或者文本编辑器打开看一下。
我感觉这个大小,像个 html 的错误页面。

如果是错误页面,打开看看就知道哪里错了~

--------
string URLAddress = URL.Substring(0, n);
这时, URLAddress 已经被截断了
变成:
http://www.java.net/download/jdk6/6u10/promoted/b28/binaries/

这个 url 下载下来正好是19.9k

你直接
WebRequest myre = WebRequest.Create(app);
应该就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2016-11-28 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:890万
展开全部

如果不知道链接就先分析html文件获得链接,然后下载。


文件下载的代码:

WebClient wc = new WebClient();     //创建网络通信实例
                    byte[] by = new byte[32]; //接收数据的数组
                    FileStream fs = new FileStream(filepath, FileMode.Create, FileAccess.Write); //创建文件
                    BinaryWriter bw = new BinaryWriter(fs);
                    while ((by = wc.DownloadData(dz)) != null)  //写文件
                    {
                        bw.Write(by, 0, by.Length);
                    }
                    FileInfo f = new FileInfo(filepath);
                    f.MoveTo(filepath.Remove(filepath.LastIndexOf(".temp")) + ".swf"); //更名
                    bw.Close();
                    fs.Close();  //关闭数据流
                    ric.AppendText(filepath + "下载完毕");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
他大姨
2010-04-26 · TA获得超过415个赞
知道小有建树答主
回答量:248
采纳率:50%
帮助的人:167万
展开全部
WebRequest.Create(URL);
client.DownloadFile(URL, fileName);
//DownloadFile方法执行完后,文件已经下载到本地了,后面的代码是另一种下载方法,可以注释掉.
//文件大的话DownloadFile方法会卡死,有个异步下载方法DownloadFileAsync
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
QQ2k5
2010-04-26 · TA获得超过438个赞
知道小有建树答主
回答量:911
采纳率:25%
帮助的人:259万
展开全部
用Response对象吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式