/// <summary> /// 加载指定的文件 /// </summary> /// <param name="path">文件路径</param> public void Load(string path, LoadFlag flag = LoadFlag.None) { Path = path; using (var fs = new System.IO.FileStream(path, System.IO.FileMode.Open)) { Load(fs, flag); } }
public void Load(Stream stream, LoadFlag flag = LoadFlag.None) { var tor = BencodeParser.Parse(Encoding.UTF8, stream); TorrentBencodeAdapter.FillInfoFromFile(tor[0] as DictionaryDataType, this); //加载Infobar区域的? if ((LoadFlag.LoadInfoSectionData & flag) == LoadFlag.LoadInfoSectionData) { if (!stream.CanSeek) { throw new InvalidOperationException("stream can not be seeked."); } var data = MetaInfo.OriginalDataFragment; MetaInfo.OriginalDataFragmentBuffer = new byte[(int)(data.DataEndPosition - data.DataStartPosition) + 1]; stream.Seek(data.DataStartPosition, SeekOrigin.Begin); stream.Read(MetaInfo.OriginalDataFragmentBuffer, 0, MetaInfo.OriginalDataFragmentBuffer.Length); } if (flag.HasFlag(LoadFlag.ComputeMetaInfoHash)) { var data = MetaInfo.OriginalDataFragment; var buffer = MetaInfo.OriginalDataFragmentBuffer; if (buffer == null) { if (!stream.CanSeek) { throw new InvalidOperationException("stream can not be seeked."); } buffer = new byte[(int)(data.DataEndPosition - data.DataStartPosition) + 1]; stream.Seek(data.DataStartPosition, SeekOrigin.Begin); stream.Read(buffer, 0, buffer.Length); } var sha = SHA1.Create(); MetaInfoHash = sha.ComputeHash(buffer); MetaInfoHashString = BitConverter.ToString(MetaInfoHash).Replace("-", "").ToUpper(); } }
/// <summary> /// 由指定的文件创建一个 <see cref="TorrentFile"/> 对象 /// </summary> /// <param name="path"></param> public TorrentFile(string path, LoadFlag flag = LoadFlag.None) : this() { Load(path, flag); }