private void ThreadFunction()
{
this.Cursor = Cursors.WaitCursor;
WebClient wcClient = new WebClient();
for (int i = 0; i < this.lvUpdateList.Items.Count; i++)
{
string UpdateFile = lvUpdateList.Items[i].Text.Trim();
string updateFileUrl = updateUrl + lvUpdateList.Items[i].Text.Trim();
long fileLength = 0; WebRequest webReq = WebRequest.Create(updateFileUrl);
WebResponse webRes = webReq.GetResponse();
fileLength = webRes.ContentLength; lbState.Text = "正在下载更新文件,请稍后...";
pbDownFile.Value = 0;
pbDownFile.Maximum = (int)fileLength; try
{
Stream srm = webRes.GetResponseStream();
StreamReader srmReader = new StreamReader(srm);
byte[] bufferbyte = new byte[fileLength];
int allByte = (int)bufferbyte.Length;
int startByte = 0;
while (fileLength > 0)
{
Application.DoEvents();
int downByte = srm.Read(bufferbyte, startByte, allByte);
if (downByte == 0) { break; };
startByte += downByte;
allByte -= downByte;
pbDownFile.Value += downByte; float part = (float)startByte / 1024;
float total = (float)bufferbyte.Length / 1024;
int percent = Convert.ToInt32((part / total) * 100); this.lvUpdateList.Items[i].SubItems[2].Text = percent.ToString() + "%"; } string tempPath = tempUpdatePath + UpdateFile;
CreateDirtory(tempPath);
FileStream fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(bufferbyte, 0, bufferbyte.Length);
srm.Close();
srmReader.Close();
fs.Close();
}
catch (WebException ex)
{
MessageBox.Show("更新文件下载失败!" + ex.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
InvalidateControl();
this.Cursor = Cursors.Default;
}首先声明,这段代码是来源于网络,用于自动升级软件的,对于新手的我,实在是没看出来哪里有问题
问题是这样的,我上传到一个服务器上面的文件,经过上面的代码下载下来,文件竟然有所改变,明显的看出来的是:
1、首先右键属性查看,由有原来大小:926 KB (948,736 字节) 占用空间:928 KB (950,272 字节)
下载到本地以后变为: 大小:927 KB (949,248 字节) 占用空间:928 KB (950,272 字节)2、其次就是文件失效了,这个文件是一个DLL文件,里面有窗体和图片,为了安全我修改了后缀,而且本地调用也是好用的
但是通过上面的代码下载到本地以后,再次调用的时候,文件失效了我可以给大家链接,有兴趣的朋友可以测试一下,我不知道原因出在哪里,还望各位仁兄帮忙出出主意,分的话就200吧,虽然我觉得对于高手来讲这个问题应该不算什么,但是小弟想尽快解决这个问题,在此谢谢各位了!
http://dh.wesiedu.com/ceshikuaijidiansuanhua/Coursewares/CW01_004.kj
FTP下载我也有个程序,绝对好用
{
WebClient wcClient = new WebClient();
WebRequest webReq = WebRequest.Create("http://dh.wesiedu.com/ceshikuaijidiansuanhua/Coursewares/CW01_004.kj");
try
{
WebResponse webRes = webReq.GetResponse();
Stream srm = webRes.GetResponseStream();
if(srm==null) return;
byte[] bufferbyte = new byte[1024];
int downByte = 0;
FileStream fs = new FileStream("d:\\1.dll", FileMode.OpenOrCreate, FileAccess.Write); while (true)
{
downByte = srm.Read(bufferbyte, 0, 1024);
if (downByte == 0) break;
fs.Write(bufferbyte, 0, downByte); } webRes.Close();
srm.Close();
fs.Close();
}
catch (WebException ex)
{
}
}
通过浏览器直接下载和代码下载的都是一样大小,而且可以通过reflector打开查看内容,很正常,没有什么问题
要是用reflector看的话貌似不是精简的代码也没有问题,哈哈~~~
谢谢哦,结贴!