




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对于这个类在解析Torrent 文件时候可能有错误,请大家指正。先把文件解析的类贴出来,连接有空再发把。使用TorrentFile File = new TorrentFile(openFileDialog1.FileName);File.TorrentFileInfoClass 文件信息File.TorrentAnnounceList 服务器列表全部代码using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using System.Collections;namespace Zgke.OtherFile / / Torrent文件 / ZgkeS / 2008-08-28 / public class TorrentFile #region 私有字段 private string _OpenError = ; private bool _OpenFile = false; private string _TorrentAnnounce = ; private IList _TorrentAnnounceList = new List(); private DateTime _TorrentCreateTime = new DateTime(1970,1,1,0,0,0); private long _TorrentCodePage = 0; private string _TorrentComment = ; private string _TorrentCreatedBy = ; private string _TorrentEncoding = ; private string _TorrentCommentUTF8 = ; private IList _TorrentFileInfo = new List(); private string _TorrentName = ; private string _TorrentNameUTF8 = ; private long _TorrentPieceLength = 0; private byte _TorrentPieces; private string _TorrentPublisher = ; private string _TorrentPublisherUTF8 = ; private string _TorrentPublisherUrl = ; private string _TorrentPublisherUrlUTF8 = ; private IList _TorrentNotes = new List(); #endregion #region 属性 / / 错误信息 / public string OpenError set _OpenError = value; get return _OpenError; / / 是否正常打开文件 / public bool OpenFile set _OpenFile = value; get return _OpenFile; / / 服务器的URL(字符串) / public string TorrentAnnounce set _TorrentAnnounce = value; get return _TorrentAnnounce; / / 备用tracker服务器列表(列表) / public IList TorrentAnnounceList set _TorrentAnnounceList = value; get return _TorrentAnnounceList; / / 种子创建的时间,Unix标准时间格式,从1970 1月1日 00:00:00到创建时间的秒数(整数) / public DateTime TorrentCreateTime set _TorrentCreateTime = value; get return _TorrentCreateTime; / / 未知数字CodePage / public long TorrentCodePage set _TorrentCodePage = value; get return _TorrentCodePage; / / 种子描述 / public string TorrentComment set _TorrentComment = value; get return _TorrentComment; / / 编码方式 / public string TorrentCommentUTF8 set _TorrentCommentUTF8 = value; get return _TorrentCommentUTF8; / / 创建人 / public string TorrentCreatedBy set _TorrentCreatedBy = value; get return _TorrentCreatedBy; / / 编码方式 / public string TorrentEncoding set _TorrentEncoding = value; get return _TorrentEncoding; / / 文件信息 / public IList TorrentFileInfo set _TorrentFileInfo = value; get return _TorrentFileInfo; / / 种子名 / public string TorrentName set _TorrentName = value; get return _TorrentName; / / 种子名UTF8 / public string TorrentNameUTF8 set _TorrentNameUTF8 = value; get return _TorrentNameUTF8; / / 每个块的大小,单位字节(整数) / public long TorrentPieceLength set _TorrentPieceLength = value; get return _TorrentPieceLength; / / 每个块的20个字节的SHA1 Hash的值(二进制格式) / private byte TorrentPieces set _TorrentPieces = value; get return _TorrentPieces; / / 出版 / public string TorrentPublisher set _TorrentPublisher = value; get return _TorrentPublisher; / / 出版UTF8 / public string TorrentPublisherUTF8 set _TorrentPublisherUTF8 = value; get return _TorrentPublisherUTF8; / / 出版地址 / public string TorrentPublisherUrl set _TorrentPublisherUrl = value; get return _TorrentPublisherUrl; / / 出版地址 / public string TorrentPublisherUrlUTF8 set _TorrentPublisherUrlUTF8 = value; get return _TorrentPublisherUrlUTF8; / / NODES / public IList TorrentNotes set _TorrentNotes = value; get return _TorrentNotes; #endregion public TorrentFile(string FileName) System.IO.FileStream TorrentFile = new System.IO.FileStream(FileName, System.IO.FileMode.Open); byte TorrentBytes = new byteTorrentFile.Length; TorrentFile.Read(TorrentBytes, 0, TorrentBytes.Length); TorrentFile.Close(); if (char)TorrentBytes0 != d) if (OpenError.Length = 0) OpenError = 错误的Torrent文件,开头第1字节不是100; return; GetTorrentData(TorrentBytes); #region 开始读数据 / / 开始读取 / / private void GetTorrentData(byte TorrentBytes) int StarIndex = 1; while (true) object Keys = GetKeyText(TorrentBytes, ref StarIndex); if (Keys = null) if (StarIndex = TorrentBytes.Length) OpenFile = true; break; if (GetValueText(TorrentBytes, ref StarIndex, Keys.ToString().ToUpper() = false) break; #endregion / / 读取结构 / / / / / private bool GetValueText(byte TorrentBytes,ref int StarIndex, string Keys) switch (Keys) case ANNOUNCE: TorrentAnnounce = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case ANNOUNCE-LIST: int ListCount = 0; ArrayList _TempList=GetKeyData(TorrentBytes, ref StarIndex, ref ListCount); for (int i = 0; i != _TempList.Count; i+) TorrentAnnounceList.Add(_TempListi.ToString(); break; case CREATION DATE: object Date = GetKeyNumb(TorrentBytes, ref StarIndex).ToString(); if (Date = null) if (OpenError.Length = 0) OpenError = CREATION DATE 返回不是数字类型; return false; TorrentCreateTime = TorrentCreateTime.AddTicks(long.Parse(Date.ToString(); break; case CODEPAGE: object CodePageNumb = GetKeyNumb(TorrentBytes, ref StarIndex); if (CodePageNumb = null) if (OpenError.Length = 0) OpenError = CODEPAGE 返回不是数字类型; return false; TorrentCodePage = long.Parse(CodePageNumb.ToString(); break; case ENCODING: TorrentEncoding = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case CREATED BY: TorrentCreatedBy = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case COMMENT: TorrentComment = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case COMMENT.UTF-8: TorrentCommentUTF8 = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case INFO: int FileListCount = 0; GetFileInfo(TorrentBytes, ref StarIndex, ref FileListCount); break; case NAME: TorrentName = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case NAME.UTF-8: TorrentNameUTF8 = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case PIECE LENGTH: object PieceLengthNumb = GetKeyNumb(TorrentBytes, ref StarIndex); if (PieceLengthNumb = null) if (OpenError.Length = 0) OpenError = PIECE LENGTH 返回不是数字类型; return false; TorrentPieceLength = long.Parse(PieceLengthNumb.ToString(); break; case PIECES: TorrentPieces = GetKeyByte(TorrentBytes, ref StarIndex); break; case PUBLISHER: TorrentPublisher = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case PUBLISHER.UTF-8: TorrentPublisherUTF8 = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case PUBLISHER-URL: TorrentPublisherUrl = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case PUBLISHER-URL.UTF-8: TorrentPublisherUrlUTF8 = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case NODES: int NodesCount = 0; ArrayList _NodesList = GetKeyData(TorrentBytes, ref StarIndex, ref NodesCount); int IPCount= _NodesList.Count/2; for (int i = 0; i != IPCount; i+) TorrentNotes.Add(_NodesListi * 2 + : + _NodesList(i * 2) + 1); break; default: return false; return true; #region 获取数据 / / 获取列表方式 I1:Xe=X 会调用GetKeyText / / / / private ArrayList GetKeyData(byte TorrentBytes, ref int StarIndex, ref int ListCount) ArrayList _TempList = new ArrayList(); while (true) string TextStar = Encoding.UTF8.GetString(TorrentBytes, StarIndex, 1); switch (TextStar) case l: StarIndex+; ListCount+; break; case e: ListCount-; StarIndex+; if (ListCount = 0) return _TempList; break; case i: _TempList.Add(GetKeyNumb(TorrentBytes,ref StarIndex).ToString(); break; default: object ListText = GetKeyText(TorrentBytes, ref StarIndex); if (ListText != null) _TempList.Add(ListText.ToString(); else if (OpenError.Length = 0) OpenError = 错误的Torrent文件,ANNOUNCE-LIST错误; return _TempList; break; / / 获取字符串 / / / / private object GetKeyText(byte TorrentBytes, ref int StarIndex) int Numb = 0; int LeftNumb = 0; for (int i = StarIndex; i != TorrentBytes.Length; i+) if (char)TorrentBytesi = :) break; if (char)TorrentBytesi = e) LeftNumb+; continue; Numb+; StarIndex += LeftNumb; string TextNumb = Encoding.UTF8.GetString(TorrentBytes, StarIndex, Numb); try int ReadNumb = Int32.Parse(TextNumb); StarIndex = StarIndex + Numb + 1; object KeyText = Encoding.UTF8.GetString(TorrentBytes, StarIndex, ReadNumb); StarIndex += ReadNumb; return KeyText; catch return null; / / 获取数字 / / / private object GetKeyNumb(byte TorrentBytes, ref int StarIndex) if (Encoding.UTF8.GetString(TorrentBytes, StarIndex, 1) = i) int Numb = 0; for (int i = StarIndex; i != TorrentBytes.Length; i+) if (char)TorrentBytesi = e) break; Numb+; StarIndex+; long RetNumb = 0; try RetNumb=long.Parse(Encoding.UTF8.GetString(TorrentBytes, StarIndex, Numb-1); StarIndex += Numb; return RetNumb; catch return null; else return null; / / 获取BYTE数据 / / / / private byte GetKeyByte(byte TorrentBytes, ref int StarIndex) int Numb = 0; for (int i = StarIndex; i != TorrentBytes.Length; i+) if (char)TorrentBytesi = :) break; Numb+; string TextNumb = Encoding.UTF8.GetString(TorrentBytes, StarIndex, Numb); try int ReadNumb = Int32.Parse(TextNumb); StarIndex = StarIndex + Numb + 1; System.IO.MemoryStream KeyMemory = new System.IO.MemoryStream(TorrentBytes, StarIndex, ReadNumb); byte KeyBytes = new byteReadNumb; KeyMemory.Read(KeyBytes, 0, ReadNumb); KeyMemory.Close(); StarIndex += ReadNumb; return KeyBytes; catch return null; / / 对付INFO的结构 / / / / private void GetFileInfo(byte TorrentBytes,ref int StarIndex,ref int ListCount) if (char)TorrentBytesStarIndex != d) return; StarIndex+; if(GetKeyText(TorrentBytes, ref StarIndex).ToStr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025临时用地补偿合同范本
- 金属综合回收利用项目建筑工程方案
- 高端化学试剂和助剂生产项目风险评估报告
- 120万千瓦光伏项目经济效益和社会效益分析报告
- 法基础试题及答案搜狐
- 开发区污水处理厂扩容提质建设项目环境影响报告书
- 物流学基础试题及答案
- 天然气管网互通改造项目规划设计方案
- 电商平台商家信用贷款合同续签及信用评估协议
- 创意离婚协议书范本:共同财产创意管理方案
- 记叙人称及叙述视角课件-2025年中考语文二轮专题
- 殡葬业务科管理制度
- JG/T 404-2013空气过滤器用滤料
- 大米委托加工合同范本
- 学校物品捐赠协议书
- 2025-2030国内地热能行业市场发展现状及竞争格局与投资发展前景研究报告
- 《财务报表分析课件》
- 《科研经费的使用与管理》课件
- 超市售后服务管理制度
- 贵州省考试院2025年4月高三年级适应性考试数学试题及答案
- 钢筋修复方案
评论
0/150
提交评论