/// <summary> /// 保存 下载的具体信息 /// </summary> /// <param name="info">要存储的下载信息,包括文件的地址,文件的大小和已下载的大小</param> public void SaveDownloadInfo(XFileDownloadInfo info) { if(null != Document) { XElement downloadInfoElement = Document.Root; XElement downloadElement = new XElement(CONFIG_FILE_TAG_DOWNLOAD); downloadInfoElement.Add(downloadElement); downloadElement.SetAttributeValue(CONFIG_FILE_TAG_ID, info.Url); downloadElement.SetAttributeValue(CONFIG_FILE_TAG_COMPLETE_SIZE, info.CompleteSize); downloadElement.SetAttributeValue(CONFIG_FILE_TAG_TOTAL_SIZE, info.TotalSize); XUtils.WriteFile(ConfigPath, Document.ToString()); } }
/// <summary> /// 初始化下载信息(如果是第一次下载,执行创建本地文件,获取文件的总大小以及在配置文件中添加该条记录, /// 如果不是第一次下载,则从配置文件中取出已经下载了的信息,完成断点续传) /// </summary> private void InitDownloadInfo() { int totalSize = 0; if (!FileTransferRecorder.HasDownloadInfo(Url)) { DownloadInfo = new XFileDownloadInfo(totalSize, 0, Url); // 保存mDownloadInfo中的数据到配置文件 FileTransferRecorder.SaveDownloadInfo(DownloadInfo); // 如果第一次下的时候存在temp文件则删除之 if (System.IO.File.Exists(LocalFilePath + TEMP_FILE_SUFFIX)) { System.IO.File.Delete(LocalFilePath + TEMP_FILE_SUFFIX); } } else { // 得到配置文件中已有的url的下载器的具体信息 DownloadInfo = FileTransferRecorder.GetDownloadInfo(Url); totalSize = DownloadInfo.TotalSize; if (totalSize == 0) { if (System.IO.File.Exists(LocalFilePath + TEMP_FILE_SUFFIX)) { System.IO.File.Delete(LocalFilePath + TEMP_FILE_SUFFIX); } } else { DownloadInfo.CompleteSize = GetCompleteSize(LocalFilePath + TEMP_FILE_SUFFIX); } } if (!System.IO.File.Exists(LocalFilePath + TEMP_FILE_SUFFIX)) { FileStream fs = System.IO.File.Create(LocalFilePath + TEMP_FILE_SUFFIX); fs.Close(); } }
/// <summary> /// 得到下载具体信息 /// </summary> /// <param name="url">要获取的路径</param> /// <returns>下载具体信息</returns> public XFileDownloadInfo GetDownloadInfo(String url) { XFileDownloadInfo info = null; if(null != Document) { XElement downloadElement = GetElementById(url); if (downloadElement != null) { info = new XFileDownloadInfo(int.Parse(downloadElement .Attribute(CONFIG_FILE_TAG_TOTAL_SIZE).Value), int.Parse(downloadElement .Attribute(CONFIG_FILE_TAG_COMPLETE_SIZE).Value), url); } } return info; }