900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C# 解析种子文件(bt文件)

C# 解析种子文件(bt文件)

时间:2019-07-29 00:24:32

相关推荐

C# 解析种子文件(bt文件)

原文地址:/love_beibei/article/details/7460565

[csharp]view plaincopyprint?usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Collections; namespaceXunleiHelper { publicclassTorrent { #region私有字段 privatestring_openError=""; privatebool_openFile=false; privatestring_announce=""; privateIList<string>_announceList=newList<string>(); privateDateTime_createTime=newDateTime(1970,1,1,0,0,0); privatelong_codePage=0; privatestring_comment=""; privatestring_createdBy=""; privatestring_encoding=""; privatestring_commentUTF8=""; privateIList<FileInfo>_fileList=newList<FileInfo>(); privatestring_name=""; privatestring_nameUTF8=""; privatelong_pieceLength=0; privatebyte[]_pieces; privatestring_publisher=""; privatestring_publisherUTF8=""; privatestring_publisherUrl=""; privatestring_publisherUrlUTF8=""; privateIList<string>_notes=newList<string>(); privatelong_totalLength; #endregion #region属性 ///<summary> ///错误信息 ///</summary> publicstringOpenError{set{_openError=value;}get{return_openError;}} ///<summary> ///是否正常打开文件 ///</summary> publicboolOpenFile{set{_openFile=value;}get{return_openFile;}} ///<summary> ///服务器的URL(字符串) ///</summary> publicstringAnnounce{set{_announce=value;}get{return_announce;}} ///<summary> ///备用tracker服务器列表(列表) ///</summary> publicIList<string>AnnounceList{set{_announceList=value;}get{return_announceList;}} ///<summary> ///种子创建的时间,Unix标准时间格式,从19701月1日00:00:00到创建时间的秒数(整数) ///</summary> publicDateTimeCreateTime{set{_createTime=value;}get{return_createTime;}} ///<summary> ///未知数字CodePage ///</summary> publiclongCodePage{set{_codePage=value;}get{return_codePage;}} ///<summary> ///种子描述 ///</summary> publicstringComment{set{_comment=value;}get{return_comment;}} ///<summary> ///编码方式 ///</summary> publicstringCommentUTF8{set{_commentUTF8=value;}get{return_commentUTF8;}} ///<summary> ///创建人 ///</summary> publicstringCreatedBy{set{_createdBy=value;}get{return_createdBy;}} ///<summary> ///编码方式 ///</summary> publicstringEncoding{set{_encoding=value;}get{return_encoding;}} ///<summary> ///文件信息 ///</summary> publicIList<FileInfo>FileList{set{_fileList=value;}get{return_fileList;}} ///<summary> ///种子名 ///</summary> publicstringName{set{_name=value;}get{return_name;}} ///<summary> ///种子名UTF8 ///</summary> publicstringNameUTF8{set{_nameUTF8=value;}get{return_nameUTF8;}} ///<summary> ///每个块的大小,单位字节(整数) ///</summary> publiclongPieceLength{set{_pieceLength=value;}get{return_pieceLength;}} ///<summary> ///每个块的20个字节的SHA1Hash的值(二进制格式) ///</summary> privatebyte[]Pieces{set{_pieces=value;}get{return_pieces;}} ///<summary> ///出版 ///</summary> publicstringPublisher{set{_publisher=value;}get{return_publisher;}} ///<summary> ///出版UTF8 ///</summary> publicstringPublisherUTF8{set{_publisherUTF8=value;}get{return_publisherUTF8;}} ///<summary> ///出版地址 ///</summary> publicstringPublisherUrl{set{_publisherUrl=value;}get{return_publisherUrl;}} ///<summary> ///出版地址 ///</summary> publicstringPublisherUrlUTF8{set{_publisherUrlUTF8=value;}get{return_publisherUrlUTF8;}} ///<summary> ///NODES ///</summary> publicIList<string>Notes{set{_notes=value;}get{return_notes;}} ///<summary> ///包含文件的总长度 ///</summary> publiclongTotalLength { get { return_totalLength; } } #endregion publicTorrent(stringfileName) { System.IO.FileStreamtorrentFile=newSystem.IO.FileStream(fileName,System.IO.FileMode.Open); byte[]buffer=newbyte[torrentFile.Length]; torrentFile.Read(buffer,0,buffer.Length); torrentFile.Close(); if((char)buffer[0]!='d') { if(OpenError.Length==0)OpenError="错误的Torrent文件,开头第1字节不是100"; return; } GetTorrentData(buffer); } #region开始读数据 ///<summary> ///开始读取 ///</summary> ///<paramname="buffer"></param> privatevoidGetTorrentData(byte[]buffer) { intstartIndex=1; while(true) { objectKeys=GetKeyText(buffer,refstartIndex); if(Keys==null) { if(startIndex>=buffer.Length)OpenFile=true; break; } if(GetValueText(buffer,refstartIndex,Keys.ToString().ToUpper())==false)break; } } #endregion ///<summary> ///读取结构 ///</summary> ///<paramname="buffer"></param> ///<paramname="starIndex"></param> ///<paramname="key"></param> ///<returns></returns> privateboolGetValueText(byte[]buffer,refintstarIndex,stringkey) { switch(key) { case"ANNOUNCE": Announce=GetKeyText(buffer,refstarIndex).ToString(); break; case"ANNOUNCE-LIST": intlistCount=0; ArrayList_tempList=GetKeyData(buffer,refstarIndex,reflistCount); for(inti=0;i!=_tempList.Count;i++) { AnnounceList.Add(_tempList[i].ToString()); } break; case"CREATIONDATE": objectdate=GetKeyNumb(buffer,refstarIndex).ToString(); if(date==null) { if(OpenError.Length==0)OpenError="CREATIONDATE返回不是数字类型"; returnfalse; } CreateTime=CreateTime.AddTicks(long.Parse(date.ToString())); break; case"CODEPAGE": objectcodePageNumb=GetKeyNumb(buffer,refstarIndex); if(codePageNumb==null) { if(OpenError.Length==0)OpenError="CODEPAGE返回不是数字类型"; returnfalse; } CodePage=long.Parse(codePageNumb.ToString()); break; case"ENCODING": Encoding=GetKeyText(buffer,refstarIndex).ToString(); break; case"CREATEDBY": CreatedBy=GetKeyText(buffer,refstarIndex).ToString(); break; case"COMMENT": Comment=GetKeyText(buffer,refstarIndex).ToString(); break; case"COMMENT.UTF-8": CommentUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"INFO": intfileListCount=0; GetFileInfo(buffer,refstarIndex,reffileListCount); break; case"NAME": Name=GetKeyText(buffer,refstarIndex).ToString(); break; case"NAME.UTF-8": NameUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"PIECELENGTH": objectpieceLengthNumb=GetKeyNumb(buffer,refstarIndex); if(pieceLengthNumb==null) { if(OpenError.Length==0)OpenError="PIECELENGTH返回不是数字类型"; returnfalse; } PieceLength=long.Parse(pieceLengthNumb.ToString()); break; case"PIECES": Pieces=GetKeyByte(buffer,refstarIndex); break; case"PUBLISHER": Publisher=GetKeyText(buffer,refstarIndex).ToString(); break; case"PUBLISHER.UTF-8": PublisherUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"PUBLISHER-URL": PublisherUrl=GetKeyText(buffer,refstarIndex).ToString(); break; case"PUBLISHER-URL.UTF-8": PublisherUrlUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"NODES": intnodesCount=0; ArrayList_nodesList=GetKeyData(buffer,refstarIndex,refnodesCount); intipCount=_nodesList.Count/2; for(inti=0;i!=ipCount;i++) { Notes.Add(_nodesList[i*2]+":"+_nodesList[(i*2)+1]); } break; default: returnfalse; } returntrue; } #region获取数据 ///<summary> ///获取列表方式"I1:Xe"="X"会调用GetKeyText ///</summary> ///<paramname="buffer"></param> ///<paramname="starIndex"></param> ///<paramname="listCount"></param> privateArrayListGetKeyData(byte[]buffer,refintstarIndex,refintlistCount) { ArrayList_tempList=newArrayList(); while(true) { stringtextStar=System.Text.Encoding.UTF8.GetString(buffer,starIndex,1); switch(textStar) { case"l": starIndex++; listCount++; break; case"e": listCount--; starIndex++; if(listCount==0)return_tempList; break; case"i": _tempList.Add(GetKeyNumb(buffer,refstarIndex).ToString()); break; default: objectlistText=GetKeyText(buffer,refstarIndex); if(listText!=null) { _tempList.Add(listText.ToString()); } else { if(OpenError.Length==0) { OpenError="错误的Torrent文件,ANNOUNCE-LIST错误"; return_tempList; } } break; } } } ///<summary> ///获取字符串 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> ///<returns></returns> privateobjectGetKeyText(byte[]buffer,refintstartIndex) { intnumb=0; intleftNumb=0; for(inti=startIndex;i!=buffer.Length;i++) { if((char)buffer[i]==':')break; if((char)buffer[i]=='e') { leftNumb++; continue; } numb++; } startIndex+=leftNumb; stringtextNumb=System.Text.Encoding.UTF8.GetString(buffer,startIndex,numb); try { intreadNumb=Int32.Parse(textNumb); startIndex=startIndex+numb+1; objectkeyText=System.Text.Encoding.UTF8.GetString(buffer,startIndex,readNumb); startIndex+=readNumb; returnkeyText; } catch { returnnull; } } ///<summary> ///获取数字 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> privateobjectGetKeyNumb(byte[]buffer,refintstartIndex) { if(System.Text.Encoding.UTF8.GetString(buffer,startIndex,1)=="i") { intnumb=0; for(inti=startIndex;i!=buffer.Length;i++) { if((char)buffer[i]=='e')break; numb++; } startIndex++; longretNumb=0; try { retNumb=long.Parse(System.Text.Encoding.UTF8.GetString(buffer,startIndex,numb-1)); startIndex+=numb; returnretNumb; } catch { returnnull; } } else { returnnull; } } ///<summary> ///获取BYTE数据 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> ///<returns></returns> privatebyte[]GetKeyByte(byte[]buffer,refintstartIndex) { intnumb=0; for(inti=startIndex;i!=buffer.Length;i++) { if((char)buffer[i]==':')break; numb++; } stringtextNumb=System.Text.Encoding.UTF8.GetString(buffer,startIndex,numb); try { intreadNumb=Int32.Parse(textNumb); startIndex=startIndex+numb+1; System.IO.MemoryStreamkeyMemory=newSystem.IO.MemoryStream(buffer,startIndex,readNumb); byte[]keyBytes=newbyte[readNumb]; keyMemory.Read(keyBytes,0,readNumb); keyMemory.Close(); startIndex+=readNumb; returnkeyBytes; } catch { returnnull; } } ///<summary> ///对付INFO的结构 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> ///<paramname="listCount"></param> privatevoidGetFileInfo(byte[]buffer,refintstartIndex,refintlistCount) { if((char)buffer[startIndex]!='d')return; startIndex++; if(GetKeyText(buffer,refstartIndex).ToString().ToUpper()=="FILES") { FileInfoinfo=newFileInfo(); while(true) { stringTextStar=System.Text.Encoding.UTF8.GetString(buffer,startIndex,1); switch(TextStar) { case"l": startIndex++; listCount++; break; case"e": listCount--; startIndex++; if(listCount==1)FileList.Add(info); if(listCount==0)return; break; case"d": info=newFileInfo(); listCount++; startIndex++; break; default: objectlistText=GetKeyText(buffer,refstartIndex); if(listText==null)return; switch(listText.ToString().ToUpper())//转换为大写 { case"ED2K": info.De2K=GetKeyText(buffer,refstartIndex).ToString(); break; case"FILEHASH": info.FileHash=GetKeyText(buffer,refstartIndex).ToString(); break; case"LENGTH": info.Length=Convert.ToInt64(GetKeyNumb(buffer,refstartIndex)); _totalLength+=info.Length; break; case"PATH": intPathCount=0; ArrayListPathList=GetKeyData(buffer,refstartIndex,refPathCount); stringTemp=""; for(inti=0;i!=PathList.Count;i++) { if(i<PathList.Count&&i!=0) Temp+="\\"; Temp+=PathList[i].ToString(); } info.Path=Temp; break; case"PATH.UTF-8": intpathUtf8Count=0; ArrayListpathutf8List=GetKeyData(buffer,refstartIndex,refpathUtf8Count); stringutfTemp=""; for(inti=0;i!=pathutf8List.Count;i++) { utfTemp+=pathutf8List[i].ToString(); } info.PathUTF8=utfTemp; break; } break; } } } } #endregion ///<summary> ///对应结构INFO多个文件时 ///</summary> publicclassFileInfo { privatestringpath=""; privatestringpathutf8=""; privatelonglength=0; privatestringmd5sum=""; privatestringde2k=""; privatestringfilehash=""; ///<summary> ///文件路径 ///</summary> publicstringPath{get{returnpath;}set{path=value;}} ///<summary> ///UTF8的名称 ///</summary> publicstringPathUTF8{get{returnpathutf8;}set{pathutf8=value;}} ///<summary> ///文件大小 ///</summary> publiclongLength{get{returnlength;}set{length=value;}} ///<summary> ///MD5验效(可选) ///</summary> publicstringMD5Sum{get{returnmd5sum;}set{md5sum=value;}} ///<summary> ///ED2K未知 ///</summary> publicstringDe2K{get{returnde2k;}set{de2k=value;}} ///<summary> ///FileHash未知 ///</summary> publicstringFileHash{get{returnfilehash;}set{filehash=value;}} } } }

[csharp]view plaincopyprint?usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Collections; namespaceXunleiHelper { publicclassTorrent { #region私有字段 privatestring_openError=""; privatebool_openFile=false; privatestring_announce=""; privateIList<string>_announceList=newList<string>(); privateDateTime_createTime=newDateTime(1970,1,1,0,0,0); privatelong_codePage=0; privatestring_comment=""; privatestring_createdBy=""; privatestring_encoding=""; privatestring_commentUTF8=""; privateIList<FileInfo>_fileList=newList<FileInfo>(); privatestring_name=""; privatestring_nameUTF8=""; privatelong_pieceLength=0; privatebyte[]_pieces; privatestring_publisher=""; privatestring_publisherUTF8=""; privatestring_publisherUrl=""; privatestring_publisherUrlUTF8=""; privateIList<string>_notes=newList<string>(); privatelong_totalLength; #endregion #region属性 ///<summary> ///错误信息 ///</summary> publicstringOpenError{set{_openError=value;}get{return_openError;}} ///<summary> ///是否正常打开文件 ///</summary> publicboolOpenFile{set{_openFile=value;}get{return_openFile;}} ///<summary> ///服务器的URL(字符串) ///</summary> publicstringAnnounce{set{_announce=value;}get{return_announce;}} ///<summary> ///备用tracker服务器列表(列表) ///</summary> publicIList<string>AnnounceList{set{_announceList=value;}get{return_announceList;}} ///<summary> ///种子创建的时间,Unix标准时间格式,从19701月1日00:00:00到创建时间的秒数(整数) ///</summary> publicDateTimeCreateTime{set{_createTime=value;}get{return_createTime;}} ///<summary> ///未知数字CodePage ///</summary> publiclongCodePage{set{_codePage=value;}get{return_codePage;}} ///<summary> ///种子描述 ///</summary> publicstringComment{set{_comment=value;}get{return_comment;}} ///<summary> ///编码方式 ///</summary> publicstringCommentUTF8{set{_commentUTF8=value;}get{return_commentUTF8;}} ///<summary> ///创建人 ///</summary> publicstringCreatedBy{set{_createdBy=value;}get{return_createdBy;}} ///<summary> ///编码方式 ///</summary> publicstringEncoding{set{_encoding=value;}get{return_encoding;}} ///<summary> ///文件信息 ///</summary> publicIList<FileInfo>FileList{set{_fileList=value;}get{return_fileList;}} ///<summary> ///种子名 ///</summary> publicstringName{set{_name=value;}get{return_name;}} ///<summary> ///种子名UTF8 ///</summary> publicstringNameUTF8{set{_nameUTF8=value;}get{return_nameUTF8;}} ///<summary> ///每个块的大小,单位字节(整数) ///</summary> publiclongPieceLength{set{_pieceLength=value;}get{return_pieceLength;}} ///<summary> ///每个块的20个字节的SHA1Hash的值(二进制格式) ///</summary> privatebyte[]Pieces{set{_pieces=value;}get{return_pieces;}} ///<summary> ///出版 ///</summary> publicstringPublisher{set{_publisher=value;}get{return_publisher;}} ///<summary> ///出版UTF8 ///</summary> publicstringPublisherUTF8{set{_publisherUTF8=value;}get{return_publisherUTF8;}} ///<summary> ///出版地址 ///</summary> publicstringPublisherUrl{set{_publisherUrl=value;}get{return_publisherUrl;}} ///<summary> ///出版地址 ///</summary> publicstringPublisherUrlUTF8{set{_publisherUrlUTF8=value;}get{return_publisherUrlUTF8;}} ///<summary> ///NODES ///</summary> publicIList<string>Notes{set{_notes=value;}get{return_notes;}} ///<summary> ///包含文件的总长度 ///</summary> publiclongTotalLength { get { return_totalLength; } } #endregion publicTorrent(stringfileName) { System.IO.FileStreamtorrentFile=newSystem.IO.FileStream(fileName,System.IO.FileMode.Open); byte[]buffer=newbyte[torrentFile.Length]; torrentFile.Read(buffer,0,buffer.Length); torrentFile.Close(); if((char)buffer[0]!='d') { if(OpenError.Length==0)OpenError="错误的Torrent文件,开头第1字节不是100"; return; } GetTorrentData(buffer); } #region开始读数据 ///<summary> ///开始读取 ///</summary> ///<paramname="buffer"></param> privatevoidGetTorrentData(byte[]buffer) { intstartIndex=1; while(true) { objectKeys=GetKeyText(buffer,refstartIndex); if(Keys==null) { if(startIndex>=buffer.Length)OpenFile=true; break; } if(GetValueText(buffer,refstartIndex,Keys.ToString().ToUpper())==false)break; } } #endregion ///<summary> ///读取结构 ///</summary> ///<paramname="buffer"></param> ///<paramname="starIndex"></param> ///<paramname="key"></param> ///<returns></returns> privateboolGetValueText(byte[]buffer,refintstarIndex,stringkey) { switch(key) { case"ANNOUNCE": Announce=GetKeyText(buffer,refstarIndex).ToString(); break; case"ANNOUNCE-LIST": intlistCount=0; ArrayList_tempList=GetKeyData(buffer,refstarIndex,reflistCount); for(inti=0;i!=_tempList.Count;i++) { AnnounceList.Add(_tempList[i].ToString()); } break; case"CREATIONDATE": objectdate=GetKeyNumb(buffer,refstarIndex).ToString(); if(date==null) { if(OpenError.Length==0)OpenError="CREATIONDATE返回不是数字类型"; returnfalse; } CreateTime=CreateTime.AddTicks(long.Parse(date.ToString())); break; case"CODEPAGE": objectcodePageNumb=GetKeyNumb(buffer,refstarIndex); if(codePageNumb==null) { if(OpenError.Length==0)OpenError="CODEPAGE返回不是数字类型"; returnfalse; } CodePage=long.Parse(codePageNumb.ToString()); break; case"ENCODING": Encoding=GetKeyText(buffer,refstarIndex).ToString(); break; case"CREATEDBY": CreatedBy=GetKeyText(buffer,refstarIndex).ToString(); break; case"COMMENT": Comment=GetKeyText(buffer,refstarIndex).ToString(); break; case"COMMENT.UTF-8": CommentUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"INFO": intfileListCount=0; GetFileInfo(buffer,refstarIndex,reffileListCount); break; case"NAME": Name=GetKeyText(buffer,refstarIndex).ToString(); break; case"NAME.UTF-8": NameUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"PIECELENGTH": objectpieceLengthNumb=GetKeyNumb(buffer,refstarIndex); if(pieceLengthNumb==null) { if(OpenError.Length==0)OpenError="PIECELENGTH返回不是数字类型"; returnfalse; } PieceLength=long.Parse(pieceLengthNumb.ToString()); break; case"PIECES": Pieces=GetKeyByte(buffer,refstarIndex); break; case"PUBLISHER": Publisher=GetKeyText(buffer,refstarIndex).ToString(); break; case"PUBLISHER.UTF-8": PublisherUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"PUBLISHER-URL": PublisherUrl=GetKeyText(buffer,refstarIndex).ToString(); break; case"PUBLISHER-URL.UTF-8": PublisherUrlUTF8=GetKeyText(buffer,refstarIndex).ToString(); break; case"NODES": intnodesCount=0; ArrayList_nodesList=GetKeyData(buffer,refstarIndex,refnodesCount); intipCount=_nodesList.Count/2; for(inti=0;i!=ipCount;i++) { Notes.Add(_nodesList[i*2]+":"+_nodesList[(i*2)+1]); } break; default: returnfalse; } returntrue; } #region获取数据 ///<summary> ///获取列表方式"I1:Xe"="X"会调用GetKeyText ///</summary> ///<paramname="buffer"></param> ///<paramname="starIndex"></param> ///<paramname="listCount"></param> privateArrayListGetKeyData(byte[]buffer,refintstarIndex,refintlistCount) { ArrayList_tempList=newArrayList(); while(true) { stringtextStar=System.Text.Encoding.UTF8.GetString(buffer,starIndex,1); switch(textStar) { case"l": starIndex++; listCount++; break; case"e": listCount--; starIndex++; if(listCount==0)return_tempList; break; case"i": _tempList.Add(GetKeyNumb(buffer,refstarIndex).ToString()); break; default: objectlistText=GetKeyText(buffer,refstarIndex); if(listText!=null) { _tempList.Add(listText.ToString()); } else { if(OpenError.Length==0) { OpenError="错误的Torrent文件,ANNOUNCE-LIST错误"; return_tempList; } } break; } } } ///<summary> ///获取字符串 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> ///<returns></returns> privateobjectGetKeyText(byte[]buffer,refintstartIndex) { intnumb=0; intleftNumb=0; for(inti=startIndex;i!=buffer.Length;i++) { if((char)buffer[i]==':')break; if((char)buffer[i]=='e') { leftNumb++; continue; } numb++; } startIndex+=leftNumb; stringtextNumb=System.Text.Encoding.UTF8.GetString(buffer,startIndex,numb); try { intreadNumb=Int32.Parse(textNumb); startIndex=startIndex+numb+1; objectkeyText=System.Text.Encoding.UTF8.GetString(buffer,startIndex,readNumb); startIndex+=readNumb; returnkeyText; } catch { returnnull; } } ///<summary> ///获取数字 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> privateobjectGetKeyNumb(byte[]buffer,refintstartIndex) { if(System.Text.Encoding.UTF8.GetString(buffer,startIndex,1)=="i") { intnumb=0; for(inti=startIndex;i!=buffer.Length;i++) { if((char)buffer[i]=='e')break; numb++; } startIndex++; longretNumb=0; try { retNumb=long.Parse(System.Text.Encoding.UTF8.GetString(buffer,startIndex,numb-1)); startIndex+=numb; returnretNumb; } catch { returnnull; } } else { returnnull; } } ///<summary> ///获取BYTE数据 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> ///<returns></returns> privatebyte[]GetKeyByte(byte[]buffer,refintstartIndex) { intnumb=0; for(inti=startIndex;i!=buffer.Length;i++) { if((char)buffer[i]==':')break; numb++; } stringtextNumb=System.Text.Encoding.UTF8.GetString(buffer,startIndex,numb); try { intreadNumb=Int32.Parse(textNumb); startIndex=startIndex+numb+1; System.IO.MemoryStreamkeyMemory=newSystem.IO.MemoryStream(buffer,startIndex,readNumb); byte[]keyBytes=newbyte[readNumb]; keyMemory.Read(keyBytes,0,readNumb); keyMemory.Close(); startIndex+=readNumb; returnkeyBytes; } catch { returnnull; } } ///<summary> ///对付INFO的结构 ///</summary> ///<paramname="buffer"></param> ///<paramname="startIndex"></param> ///<paramname="listCount"></param> privatevoidGetFileInfo(byte[]buffer,refintstartIndex,refintlistCount) { if((char)buffer[startIndex]!='d')return; startIndex++; if(GetKeyText(buffer,refstartIndex).ToString().ToUpper()=="FILES") { FileInfoinfo=newFileInfo(); while(true) { stringTextStar=System.Text.Encoding.UTF8.GetString(buffer,startIndex,1); switch(TextStar) { case"l": startIndex++; listCount++; break; case"e": listCount--; startIndex++; if(listCount==1)FileList.Add(info); if(listCount==0)return; break; case"d": info=newFileInfo(); listCount++; startIndex++; break; default: objectlistText=GetKeyText(buffer,refstartIndex); if(listText==null)return; switch(listText.ToString().ToUpper())//转换为大写 { case"ED2K": info.De2K=GetKeyText(buffer,refstartIndex).ToString(); break; case"FILEHASH": info.FileHash=GetKeyText(buffer,refstartIndex).ToString(); break; case"LENGTH": info.Length=Convert.ToInt64(GetKeyNumb(buffer,refstartIndex)); _totalLength+=info.Length; break; case"PATH": intPathCount=0; ArrayListPathList=GetKeyData(buffer,refstartIndex,refPathCount); stringTemp=""; for(inti=0;i!=PathList.Count;i++) { if(i<PathList.Count&&i!=0) Temp+="\\"; Temp+=PathList[i].ToString(); } info.Path=Temp; break; case"PATH.UTF-8": intpathUtf8Count=0; ArrayListpathutf8List=GetKeyData(buffer,refstartIndex,refpathUtf8Count); stringutfTemp=""; for(inti=0;i!=pathutf8List.Count;i++) { utfTemp+=pathutf8List[i].ToString(); } info.PathUTF8=utfTemp; break; } break; } } } } #endregion ///<summary> ///对应结构INFO多个文件时 ///</summary> publicclassFileInfo { privatestringpath=""; privatestringpathutf8=""; privatelonglength=0; privatestringmd5sum=""; privatestringde2k=""; privatestringfilehash=""; ///<summary> ///文件路径 ///</summary> publicstringPath{get{returnpath;}set{path=value;}} ///<summary> ///UTF8的名称 ///</summary> publicstringPathUTF8{get{returnpathutf8;}set{pathutf8=value;}} ///<summary> ///文件大小 ///</summary> publiclongLength{get{returnlength;}set{length=value;}} ///<summary> ///MD5验效(可选) ///</summary> publicstringMD5Sum{get{returnmd5sum;}set{md5sum=value;}} ///<summary> ///ED2K未知 ///</summary> publicstringDe2K{get{returnde2k;}set{de2k=value;}} ///<summary> ///FileHash未知 ///</summary> publicstringFileHash{get{returnfilehash;}set{filehash=value;}} } } }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。