/// <summary> /// 检测文件类型 /// </summary> private HASHTYPE GetHashFileKeyType(ref TorrentFile myFile) { HASHTYPE type1 = HASHTYPE.OTHER; List<HASHTYPE> typelist = new List<HASHTYPE>(); for (int m = 0; m < myFile.TorrentFileInfo.Count;m++ ) { string str1 = myFile.TorrentFileInfo[m].Path; //获取后缀名 int dotIndex = str1.LastIndexOf('.'); string extName = str1.Substring(dotIndex+1, str1.Length - dotIndex-1).ToUpper(); HASHTYPE temp1=HASHTYPE.OTHER; if (extName == "RMVB" || extName == "AVI" || extName == "RM" || extName == "OGM" || extName == "MP4" || extName == "MKV" || extName == "FLV" || extName == "MPEG" || extName == "WMA" || extName == "ASF" || extName == "WMV" || extName == "MOV" || extName == "DAT" || extName == "BDMV" || extName == "CLPI" || extName == "M2TS" || extName == "VOB" || extName == "VCD" || extName == "DSF" || extName == "MPG" || extName == "DIVX" || extName == "TS" || extName == "TP") { type1=HASHTYPE.MOVIE; typelist.Add(type1); break; } else if (extName == "MP3" || extName == "MID" || extName == "APE" || extName == "AAC" || extName == "WAV" || extName == "WMA" || extName == "VOC" || extName == "FLAC"|| extName == "M4A") { type1=HASHTYPE.MUSIC; } else if (extName == "CHM"||extName == "EPUB" || extName == "PDF" || extName == "DOC" || extName == "TXT" || extName == "DOCX" || extName == "PPT" || extName == "PPTX" || extName == "XLS" || extName == "XLSX" || extName == "PDG" || extName == "FB2" || extName == "CBZ") { type1=HASHTYPE.BOOK; } else if(extName=="EXE"||extName=="BIN"||extName=="COM"||extName=="BAT"||extName=="RAR"||extName=="ZIP"||extName=="7z"||extName=="ISO" || extName == "MSI" || extName == "TAR" || extName == "LZH" || extName == "TGZ" || extName == "OCX" || extName == "SFV" || extName == "MDF" || extName == "DMG") { type1=HASHTYPE.EXE; } else if(extName=="BMP"||extName=="GIF"||extName=="PNG"||extName=="JPG"||extName=="RAW"||extName=="TIF"||extName=="PSD") { type1=HASHTYPE.PICTURE; } else { type1=HASHTYPE.OTHER; } typelist.Add(type1); } if (typelist.Contains(HASHTYPE.MOVIE)) type1 = HASHTYPE.MOVIE; else if (typelist.Contains(HASHTYPE.MUSIC)) type1 = HASHTYPE.MUSIC; else if (typelist.Contains(HASHTYPE.BOOK)) type1 = HASHTYPE.BOOK; else if (typelist.Contains(HASHTYPE.EXE)) type1 = HASHTYPE.EXE; else if (typelist.Contains(HASHTYPE.PICTURE)) type1 = HASHTYPE.PICTURE; else type1 = HASHTYPE.OTHER; return type1; }
/// <summary> /// 下载种子文件并进行解析读取 /// </summary> private int GetDownAndReaHashDetail(string hashname, ref HASHITEM item1, ref HASHFILEITEM[] filelist) { Int32 ticktime1 = System.Environment.TickCount; try { int res1 = 0; TorrentFile myFile = null; if (checkBox_Torrent.Checked) { res1 = m_downLoad.DownLoadFileByHashToFile(hashname); Application.DoEvents(); //让系统在百忙之中来响应其他事件 if (res1 == 1) { string filename = Path.Combine(Path.Combine(Path.Combine(m_localPath, "Torrent"), hashname.Substring(hashname.Length - 2, 2)), hashname + ".torrent"); myFile = new TorrentFile(filename); Int32 ticktime2 = System.Environment.TickCount; if (myFile == null || myFile.TorrentName.Length == 0) { m_downBadList[hashname] = System.Environment.TickCount / 1000; //解析不了的文件就直接备份 if (checkBox_Torrent.Checked) { File.Move(filename, Path.Combine(Path.Combine(m_localPath, "Torrent\\BAD"), hashname + ".torrent")); LogTheAction(1, 1, hashname + "下载文件不对,删除" + "-" + (ticktime2 - ticktime1).ToString()); } return(0); } } } else { //不用存储文件,直接在内存中操作 byte[] data = m_downLoad.DownLoadFileByHashToByte(hashname); if (data != null) { res1 = 1; } myFile = new TorrentFile(data); } //如果解析成功就进行赋值返回 if (res1 == 1) { if (myFile == null || myFile.TorrentName.Length == 0 || myFile.TorrentFileInfo.Count == 0 || myFile.TorrentFileInfo.Count > MAX_FILEDETAIL_COUNT) { Int32 ticktime2 = System.Environment.TickCount; LogTheAction(1, 2, hashname + ">>下载成功,但使用失败." + "-" + (ticktime2 - ticktime1).ToString()); m_downBadList[hashname] = System.Environment.TickCount / 1000; return(0); } else { //通过文件列表对文件是哪类进行分析判断 item1.keyType = (int)GetHashFileKeyType(ref myFile); item1.fileCnt = myFile.TorrentFileInfo.Count; item1.filetotalSize = myFile.TorrentPieceLength; //提取正确的文件名字,过滤一些网址信息 item1.keyContent = GetOneGoodString(myFile.TorrentName); filelist = new HASHFILEITEM[myFile.TorrentFileInfo.Count]; for (int m = 0; m < myFile.TorrentFileInfo.Count; m++) { filelist[m].filename = myFile.TorrentFileInfo[m].Path; filelist[m].filesize = myFile.TorrentFileInfo[m].Length; } Int32 ticktime2 = System.Environment.TickCount; LogTheAction(1, 3, myFile.TorrentName + ">>下载成功:" + myFile.TorrentFileInfo.Count + "-" + (ticktime2 - ticktime1).ToString()); return(1); } } else { Int32 ticktime2 = System.Environment.TickCount; m_downBadList[hashname] = System.Environment.TickCount / 1000; LogTheAction(1, 4, hashname + ">>下载失败" + "-" + (ticktime2 - ticktime1).ToString()); } } catch (System.Exception ex) { H31Debug.PrintLn("GetHashDetail:" + ex.StackTrace); } return(0); }
/// <summary> /// 读取线程 2013-06-16 /// </summary> private int GetHashDetail(string hashname, ref HASHITEM item1, ref HASHFILEITEM[] filelist) { Int32 ticktime1 = System.Environment.TickCount; try { int res1 = 0; TorrentFile myFile = null; if (checkBox_Torrent.Checked) { res1 = m_downLoad.DownLoadFileByHashToFile(hashname); Application.DoEvents(); //让系统在百忙之中来响应其他事件 if (res1 == 1) { string filename = m_localPath+"\\Torrent\\" +hashname.Substring(hashname.Length-1,1)+"\\"+ hashname + ".torrent"; myFile = new TorrentFile(filename); Int32 ticktime2 = System.Environment.TickCount; if (myFile == null || myFile.TorrentName.Length == 0) { m_downBadList[hashname] = System.Environment.TickCount / 1000; if (checkBox_Torrent.Checked) { //File.Delete(filename); File.Move(filename, m_localPath + "\\Torrent\\BAD\\" + hashname + ".torrent"); LogTheAction(1, 1, hashname + "下载文件不对,删除" + "-" + (ticktime2 - ticktime1).ToString()); } return 0; } } } else { byte[] data = m_downLoad.DownLoadFileByHashToByte(hashname); if (data != null) res1 = 1; myFile = new TorrentFile(data); } if (res1 == 1) { if (myFile == null || myFile.TorrentName.Length == 0 || myFile.TorrentFileInfo.Count == 0 || myFile.TorrentFileInfo.Count > MAX_FILEDETAIL_COUNT) { Int32 ticktime2 = System.Environment.TickCount; LogTheAction(1, 2, hashname + ">>下载成功,但使用失败." + "-" + (ticktime2 - ticktime1).ToString()); m_downBadList[hashname] = System.Environment.TickCount / 1000; return 0; } else { item1.keyType=(int)GetHashFileKeyType(ref myFile); item1.fileCnt = myFile.TorrentFileInfo.Count; item1.filetotalSize = myFile.TorrentPieceLength; item1.keyContent = GetOneGoodString(myFile.TorrentName); filelist = new HASHFILEITEM[myFile.TorrentFileInfo.Count]; for (int m = 0; m < myFile.TorrentFileInfo.Count; m++) { filelist[m].filename = myFile.TorrentFileInfo[m].Path; filelist[m].filesize = myFile.TorrentFileInfo[m].Length; } Int32 ticktime2 = System.Environment.TickCount; LogTheAction(1, 3, myFile.TorrentName + ">>下载成功:" + myFile.TorrentFileInfo.Count + "-" + (ticktime2 - ticktime1).ToString()); return 1; } } else { Int32 ticktime2 = System.Environment.TickCount; m_downBadList[hashname] = System.Environment.TickCount / 1000; LogTheAction(1, 4, hashname + ">>下载失败" + "-" + (ticktime2 - ticktime1).ToString()); } } catch (System.Exception ex) { //错误日志记录 H31Debug.PrintLn("GetHashDetail:" + ex.StackTrace); } return 0; }
/// <summary> /// 检测文件类型 /// </summary> private HASHTYPE GetHashFileKeyType(ref TorrentFile myFile) { HASHTYPE type1 = HASHTYPE.OTHER; List <HASHTYPE> typelist = new List <HASHTYPE>(); for (int m = 0; m < myFile.TorrentFileInfo.Count; m++) { string str1 = myFile.TorrentFileInfo[m].Path; //获取后缀名 int dotIndex = str1.LastIndexOf('.'); string extName = str1.Substring(dotIndex + 1, str1.Length - dotIndex - 1).ToUpper(); if (extName == "RMVB" || extName == "AVI" || extName == "RM" || extName == "OGM" || extName == "MP4" || extName == "MKV" || extName == "FLV" || extName == "MPEG" || extName == "WMA" || extName == "ASF" || extName == "WMV" || extName == "MOV" || extName == "DAT" || extName == "BDMV" || extName == "CLPI" || extName == "M2TS" || extName == "VOB" || extName == "VCD" || extName == "DSF" || extName == "MPG" || extName == "DIVX" || extName == "TS" || extName == "TP") { type1 = HASHTYPE.MOVIE; typelist.Add(type1); break; } else if (extName == "MP3" || extName == "MID" || extName == "APE" || extName == "AAC" || extName == "WAV" || extName == "WMA" || extName == "VOC" || extName == "FLAC" || extName == "M4A") { type1 = HASHTYPE.MUSIC; } else if (extName == "CHM" || extName == "EPUB" || extName == "PDF" || extName == "DOC" || extName == "TXT" || extName == "DOCX" || extName == "PPT" || extName == "PPTX" || extName == "XLS" || extName == "XLSX" || extName == "PDG" || extName == "FB2" || extName == "CBZ") { type1 = HASHTYPE.BOOK; } else if (extName == "EXE" || extName == "BIN" || extName == "COM" || extName == "BAT" || extName == "RAR" || extName == "ZIP" || extName == "7z" || extName == "ISO" || extName == "MSI" || extName == "TAR" || extName == "LZH" || extName == "TGZ" || extName == "OCX" || extName == "SFV" || extName == "MDF" || extName == "DMG") { type1 = HASHTYPE.EXE; } else if (extName == "BMP" || extName == "GIF" || extName == "PNG" || extName == "JPG" || extName == "RAW" || extName == "TIF" || extName == "PSD") { type1 = HASHTYPE.PICTURE; } else { type1 = HASHTYPE.OTHER; } typelist.Add(type1); } if (typelist.Contains(HASHTYPE.MOVIE)) { type1 = HASHTYPE.MOVIE; } else if (typelist.Contains(HASHTYPE.MUSIC)) { type1 = HASHTYPE.MUSIC; } else if (typelist.Contains(HASHTYPE.BOOK)) { type1 = HASHTYPE.BOOK; } else if (typelist.Contains(HASHTYPE.EXE)) { type1 = HASHTYPE.EXE; } else if (typelist.Contains(HASHTYPE.PICTURE)) { type1 = HASHTYPE.PICTURE; } else { type1 = HASHTYPE.OTHER; } return(type1); }