unity 断点下载

using UnityEngine;
using System.Collections;
using System;
using System.Net;
using System.IO;

public class Load : MonoBehaviour {

    AsyncOperation l;
    void Start () {
       // Application.backgroundLoadingPriority = ThreadPriority.Low;
       // l =  Application.LoadLevelAsync("game");
        StartCoroutine(FPointDown("http://127.0.0.1:8888/index.rar", "d:/a.rar"));
        StartCoroutine(FPointDown(@"http://dl_dir.qq.com/qqfile/qq/QQ2012/QQ2012Beta3.exe", "d:/qq.rar"));
        
    }
    

    void OnGUI () {
        GUILayout.Button(t);
    }
    void OnApplicationQuit()
    {
        print("stop");
        StopCoroutine("FPointDown");
    }
    string t = "";
    IEnumerator  downfile(string url, string LocalPath)
    {

            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);
                    t= "当前下载文件大小:" + length.ToString() + "字节   当前下载大小:" + i + "字节 下载进度" + j.ToString() + "%";

                }
                else
                {
                   t = "当前下载文件大小:" + length.ToString() + "字节   当前下载大小:" + i + "字节";
                }
                yield return false;


            }

            sIn.Close();
            wr.Close();
            fs.Close();
     
    }

    //断点下载
    IEnumerator FPointDown(string uri,string saveFile)
    {
        //打开网络连接 
        System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
        System.Net.HttpWebRequest requestGetCount = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
        long countLength = requestGetCount.GetResponse().ContentLength;
     
        //打开上次下载的文件或新建文件 
        long lStartPos = 0;
        System.IO.FileStream fs;
        if (System.IO.File.Exists(saveFile))
        {
            fs = System.IO.File.OpenWrite(saveFile);
            lStartPos = fs.Length;
            if (countLength - lStartPos <= 0)
            {
                fs.Close();
                t = "已经";
                yield break;
            }
            fs.Seek(lStartPos, System.IO.SeekOrigin.Current); //移动文件流中的当前指针 
        }
        else
        {
            fs = new System.IO.FileStream(saveFile, System.IO.FileMode.Create);
        }
      

        if (lStartPos > 0)
        {
            request.AddRange((int)lStartPos); //设置Range值
            print(lStartPos);
        }

        //向服务器请求,获得服务器回应数据流 
        System.IO.Stream ns = request.GetResponse().GetResponseStream();
        int len = 1024 * 8;
        
        byte[] nbytes = new byte[len];
        int nReadSize = 0;
        nReadSize = ns.Read(nbytes, 0, len);
        while (nReadSize > 0)
        {
            fs.Write(nbytes, 0, nReadSize);
            nReadSize = ns.Read(nbytes, 0, len);
            t = "已下载:" + fs.Length / 1024 + "kb /" + countLength / 1024 + "kb";
            yield return false;
        }
        ns.Close();
        fs.Close();
    }
}



文章转载自unity 断点下载,感谢 solq 提供好文章solq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值