以下是我们项目中实际应用的断点续传代码
public IEnumerator downloadByHttpRequest(string url,int id,string assetbundlename,GameObject slider,GameObject NoDown,GameObject BlueTop)
{
//临时文件名(把下载的资源的名字修改为临时名字 )
string assetbundletempname = assetbundlename.Replace(".assetbundle", "temp.assetbundle");
//打开上次下载的文件
long startPos = 0;
//临时文件路劲(临时存储的绝对路径)
string tempFile = LoadLocalResources.instance.GetSaveAssetBundlePath() +"/"+ assetbundletempname;
FileStream fs = null;
//如果有临时文件 读取临时文件的长度 并移动文件流指针
if (File.Exists(tempFile))
{
fs = File.OpenWrite(tempFile);
startPos = fs.Length;
fs.Seek(startPos, SeekOrigin.Current); //移动文件流中的当前指针
}
else
{
//获取文件或目录的路径
string direName = Path.GetDirectoryName(tempFile);
//如果没有这个根路径 就创建
if (!Directory.Exists(direName))
{
Directory.CreateDirectory(direName);
}
fs = new FileStream(tempFile, FileMode.Create);
}
//我这个断点续传 下载资源 使用一个协程下载的,可能同时开启不止一个这个协程,因为协程可能随时停止,打开的文件流没有
//关闭,那么下次就无法访问这个文件;防止这种情况出现,我就用一个字典记录每次打开的文件流,当协程终端时,手动关闭打
//开的 所有文件流