Exemplo n.º 1
0
 /// <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);
     }
 }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// 由指定的文件创建一个 <see cref="TorrentFile"/> 对象
 /// </summary>
 /// <param name="path"></param>
 public TorrentFile(string path, LoadFlag flag = LoadFlag.None)
     : this()
 {
     Load(path, flag);
 }