/// <summary> /// 保存更新文件集合到文件中 /// </summary> /// <param name="fc">要保存的更新文件集合</param> public static void SaveFiles(FileInfoCollection fc) { XmlDocument xml = fc.Save(); xml.Save(FileListFile); }
/// <summary> /// 从文件中读取更新文件列表 /// </summary> /// <returns>读取是否成功</returns> public static bool LoadFiles() { if (File.Exists(FileListFile)) { XmlDocument xml = new XmlDocument(); try { xml.Load(FileListFile); LocalFiles.Load(xml); LocalFiles.Refresh();//刷新文件信息 SaveFiles(); TempLocalFiles = LocalFiles.Clone();//复制列表 return true; } catch { LocalFiles.Clear(); } } return false; }
/// <summary> /// 复制一个相同的文件信息集合 /// </summary> /// <returns>复制得到的集合</returns> public new FileInfoCollection Clone() { lock (this) { FileInfoCollection fc = new FileInfoCollection(); IEnumerator ie = this.GetEnumerator(); while (ie.MoveNext()) { FileInfo fi = ((DictionaryEntry)ie.Current).Value as FileInfo; fc.Add(fi.ID, fi); } return fc; } }
/// <summary> /// 获取两个文件信息集合的差集,用于得到更新列表 /// </summary> /// <param name="clientfiles">客户端上传的已存在文件集合</param> /// <returns>需要更新的文件集合</returns> public FileInfoCollection GetDownloadList(FileInfoCollection clientfiles) { lock (this) { FileInfoCollection fc = new FileInfoCollection(); IEnumerator ie = this.GetEnumerator(); while (ie.MoveNext()) { FileInfo fi = ((DictionaryEntry)ie.Current).Value as FileInfo; int id = (int)((DictionaryEntry)ie.Current).Key; if (clientfiles.ContainsKey(id) && clientfiles[id].Equals(fi)) { //重新取得修改日期及时间 } else { fc.Add(fi.ID, fi); } } if (clientfiles.FileResume != null)//如果存在续传文件 { if (this.ContainsKey(clientfiles.FileResume.ID) && this[clientfiles.FileResume.ID].Equals(clientfiles.FileResume))//比对续传文件的信息,如果不相同则重新发送 { fc.SetFiletoResumeInfo(clientfiles.FileResume.ID, clientfiles.FileResume.Date , clientfiles.FileResume.Length, clientfiles.FileOffSet); } } return fc; } }
/// <summary> /// 创建一个用户信息类 /// </summary> /// <param name="ip">用户的网络地址</param> public UserInfo(IPEndPoint ip) { _IP = ip; _ConnectTime = DateTime.Now; _FilesToDownLoad = new FileInfoCollection(); }