本人在Win Form编程中,想通过Web Service从服务器从下载大小为几百M的文件.我现在只能实现大小为几十M的文件的下载.请高人指教.

解决方案 »

  1.   

    /// <summary>
        /// 下载升级文件
        /// </summary>
        /// <param name="FileName">文件名称</param>
        /// <param name="ByteOffset">偏移地址</param>
        /// <param name="ByteLength">下载长度</param>
        /// <returns>编码字符</returns>
        [WebMethod(EnableSession = true, Description = "下载升级文件")]
        public string DownloadByteFile(string FileName, long ByteOffset, long ByteLength)
        {
            try
            {
                string FilePath = Server.MapPath(DownLoadPath) + "\\" + FileName;
                FileStream fstream = new FileStream(FilePath, FileMode.Open);
                byte[] farray = new byte[ByteLength];
                fstream.Position = ByteOffset;
                fstream.Read(farray, 0, (int)ByteLength);
                fstream.Close();            return Convert.ToBase64String(farray);
            }
            catch (Exception)
            {
                return string.Empty;
            }
        }
      

  2.   

    string fileString = service.DownloadByteFile(dinfo.DownLoadFileName, dinfo.DownLength, dinfo.ByteLength);
                        if (fileString != string.Empty)
                        {
                            MemoryStream mstream = new MemoryStream(Convert.FromBase64String(fileString));
                            byte[] farray = new byte[mstream.Length];
                            mstream.Read(farray, 0, (int)mstream.Length);
                            mstream.Close();                        FileStream fstream = new FileStream(dinfo.DownLoadFileName, FileMode.Append);
                            fstream.Write(farray, 0, farray.Length);
                            fstream.Flush();
                            fstream.Close();                        dinfo.DownLength = dinfo.DownLength + farray.Length;
                            dinfo.SaveToXMLFile(FileName);                        this.progress.Value = (int)(dinfo.DownLength <= dinfo.FileLength ? dinfo.DownLength : dinfo.FileLength);
                            this.lblWarning.Text = "下载升级文件 - " + dinfo.DownLoadFileName + "[" + dinfo.DownLength + "/" + dinfo.FileLength + "]";
                            this.lblWarning.Refresh();                        if (dinfo.DownLength >= dinfo.FileLength)
                            {
                                this.btnOK.Text = "完成(&F)";
                                break;
                            }
                        }
      

  3.   

    我用的方法和你的几乎一样,不同的是:我retrurn  的是 一个byte[] .
      

  4.   

    byte[] 不知道
    反正我下载300M的没问题
    而且可以续传
      

  5.   

    你为什么返回的时候要转换为 string 呢?这样有什么好处吗?
      

  6.   

    to 我用的方法和你的几乎一样,不同的是:我retrurn 的是 一个byte[] .用byte[]没有什么问题,你可能是其他地方出的问题。
      

  7.   

    从服务器上读取文件:
    [WebMethod]
        public byte[] LoadFile()
        {
            string path = @"D:\工具\File.exe";
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            byte[] b = new byte[fs.Length];
            fs.Read(b, 0, (int)fs.Length);
            fs.Close();
            return b;       
        }在本地保存文件:File.exe
     private void btnLoad_Click(object sender, EventArgs e)
        {
            SERVICE.Service myservice = new XiaZai.SERVICE.Service();
            byte[] bb = myservice.LoadFile();
            SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
            SaveFileDialog1.CreatePrompt = false;
            SaveFileDialog1.OverwritePrompt = true;        string filetype = "rar";
            SaveFileDialog1.FileName = "下载测试文件";
            SaveFileDialog1.DefaultExt = filetype;
            SaveFileDialog1.Filter = "所有文件(*.*)|*.*";
            SaveFileDialog1.InitialDirectory = "c:\\";        DialogResult result = SaveFileDialog1.ShowDialog();
            System.IO.Stream fileStream;        if (result == DialogResult.OK)
            {
                fileStream = SaveFileDialog1.OpenFile();
                fileStream.Write(bb, 0, bb.Length);
                fileStream.Flush();
                fileStream.Close();
                MessageBox.Show("下载成功");
                DialogResult DR = this.DialogResult;
                if (this.DialogResult == DialogResult.OK)
                {
                    this.Close();
                }
            }
        }
      

  8.   

    byte[] b = new byte[fs.Length];
    天那  如果这个文件很大很大岂不是
    web服务里面只需要提供一个下载地址就行了
    客户端采用断点续传的方式一个缓存一个缓存的下载
      

  9.   

    那么在Win Form 中怎么实现断点续传呢?请指教