怎么我这样下载下来的文件,如果稍大了点就报:! 不可预料的压缩文件末端(如果是rar),如果是dll文件下载下来通过文件对比却是不相同的如调用: downfile("http://127.0.0.1/aa.rar","c:\\aa.rar"); public bool downfile(string url, string LocalPath)
{
try
{
Uri u = new Uri(url);
HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(u);
mRequest.Method = "GET";
mRequest.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse(); Stream sIn = wr.GetResponseStream();
FileStream fs = new FileStream(LocalPath, FileMode.Create, FileAccess.Write); long length = wr.ContentLength;
long i = 0;
decimal j = 0; while (i < length)
{
byte[] buffer = new byte[1024];
i += sIn.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length); if ((i % 1024) == 0)
{
j = Math.Round(Convert.ToDecimal((Convert.ToDouble(i) / Convert.ToDouble(length)) * 100), 4); this.Invoke(new Function(delegate()
{
statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";
})); //statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";
}
else
{
this.Invoke(new Function(delegate()
{
statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节";
}));
}
} sIn.Close();
wr.Close();
fs.Close();
MessageBox.Show("下载完成");
return true;
}
catch(Exception err)
{
MessageBox.Show("下载失败:\n"+err.Message);
return false;
} }
{
try
{
Uri u = new Uri(url);
HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(u);
mRequest.Method = "GET";
mRequest.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse(); Stream sIn = wr.GetResponseStream();
FileStream fs = new FileStream(LocalPath, FileMode.Create, FileAccess.Write); long length = wr.ContentLength;
long i = 0;
decimal j = 0; while (i < length)
{
byte[] buffer = new byte[1024];
i += sIn.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length); if ((i % 1024) == 0)
{
j = Math.Round(Convert.ToDecimal((Convert.ToDouble(i) / Convert.ToDouble(length)) * 100), 4); this.Invoke(new Function(delegate()
{
statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";
})); //statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";
}
else
{
this.Invoke(new Function(delegate()
{
statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节";
}));
}
} sIn.Close();
wr.Close();
fs.Close();
MessageBox.Show("下载完成");
return true;
}
catch(Exception err)
{
MessageBox.Show("下载失败:\n"+err.Message);
return false;
} }
解决方案 »
- c#住线程和串口网口通信类线程通信问题请教
- 十万火急,怎样去除在gp=Graphics.FromImage(bmp)上画线的问题
- 关于winform中多线程无限循环报错
- 怎样把textbox数据临时添加到datagrid里面
- 请问有没有用于PDA开发的文字识别的组件推荐?
- Microsoft Visual Studio 2005 出现的这种问题是BUG?还是版本兼容问题?
- 如何将域用户信息导出来阿,高手请指教
- 怎么样用DataFormatString显示当值为1的时候显示是,0的时候显示否?
- 怎么实现控件的旋转?
- c# socket 数据包大小设置问题
- 关于用户的操作日志记录
- c# ftp上传问题
protected void Page_Load(object sender, EventArgs e)
{
DownloadFile("DownLoad\\aa.rar");
} /**/
/// <summary>
/// 下载文件
/// </summary>
/// <param name="filename">文件物理地址</param>
protected void DownloadFile(string filename)
{
string saveFileName = "test.xls";
int intStart = filename.LastIndexOf("\\") + 1;
saveFileName = filename.Substring(intStart, filename.Length - intStart);
System.IO.FileInfo fi = new System.IO.FileInfo(filename);
string fileextname = fi.Extension;
string DEFAULT_CONTENT_TYPE = "application/unknown";
RegistryKey regkey, fileextkey;
string filecontenttype;
try
{
regkey = Registry.ClassesRoot;
fileextkey = regkey.OpenSubKey(fileextname);
filecontenttype = fileextkey.GetValue("Content Type", DEFAULT_CONTENT_TYPE).ToString();
}
catch
{
filecontenttype = DEFAULT_CONTENT_TYPE;
}
Response.Clear();
Response.Charset = "utf-8";
Response.Buffer = true;
this.EnableViewState = false;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + saveFileName);
Response.ContentType = filecontenttype;
Response.WriteFile(filename);
Response.Flush();
Response.Close();
Response.End();
}
//TransmitFile实现下载rar文件
protected void Button1_Click(object sender, EventArgs e)
{
/*
微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
代码如下:
*/
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
string filename = Server.MapPath("DownLoad/aa.rar");
Response.TransmitFile(filename);
}
//WriteFile实现下载
protected void Button2_Click(object sender, EventArgs e)
{
/*
using System.IO;
*/ string fileName = "asd.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/huishouzhan.txt");//路径 FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
//WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/huishouzhan.txt");//路径 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize]; Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
/// <summary>
/// 流方式下载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button4_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/huishouzhan.txt");//路径 //以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
{
try
{
Uri u = new Uri(url);
HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(u);
mRequest.Method = "GET";
mRequest.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse(); Stream sIn = wr.GetResponseStream();
FileStream fs = new FileStream(LocalPath, FileMode.Create, FileAccess.Write); long length = wr.ContentLength;
long i = 0;
int clen = 0;
decimal j = 0; while (i < length)
{
byte[] buffer = new byte[1024];
clen = sIn.Read(buffer, 0, buffer.Length);
i += clen;
fs.Write(buffer, 0, clen); if ((i % 1024) == 0)
{
j = Math.Round(Convert.ToDecimal((Convert.ToDouble(i) / Convert.ToDouble(length)) * 100), 4); this.Invoke(new Function(delegate()
{
statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";
})); //statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";
}
else
{
this.Invoke(new Function(delegate()
{
statusBar1.Text = "当前下载文件大小:" + length.ToString() + "字节 当前下载大小:" + i + "字节";
}));
}
} sIn.Close();
wr.Close();
fs.Close();
MessageBox.Show("下载完成");
return true;
}
catch(Exception err)
{
MessageBox.Show("下载失败:\n"+err.Message);
return false;
} }