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

解决方案 »

  1.   

    用FTP下载吗?
    FTP下载我也有个程序,绝对好用
      

  2.   

    精简的代码,没问题        private void ThreadFunction()
            {
                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)
                {
                    
                }
            }
      

  3.   


    通过浏览器直接下载和代码下载的都是一样大小,而且可以通过reflector打开查看内容,很正常,没有什么问题
      

  4.   


    要是用reflector看的话貌似不是精简的代码也没有问题,哈哈~~~
    谢谢哦,结贴!