private void MainForm_Load(object sender, EventArgs e) { //读取本地文件路径,初步化日志类 m_localPath = AppDomain.CurrentDomain.BaseDirectory; string tmpFolder = Path.Combine(m_localPath, "Temp"); if (!Directory.Exists(tmpFolder)) { Directory.CreateDirectory(tmpFolder); } H31Debug.LogFile = Path.Combine(tmpFolder, H31Debug.c_LogFile); resourceDir = Path.Combine(m_localPath, RESOURCE_DIR); //连接数据库 bool dbok = H31SQL.ConnectToDBServer(); comboBox_Type.SelectedIndex = 0; comboBox_OrderBy.SelectedIndex = 0; comboBox_Lanague.SelectedIndex = 1; //初始化显示查询表 m_data.DataSource = null; m_data.Columns.Clear(); m_data.RowHeadersVisible = false; m_data.BackgroundColor = Color.White; m_data.Columns.Add("ID", "ID"); m_data.Columns.Add("HashID", "HashID"); m_data.Columns.Add("HashKey", "Hash"); m_data.Columns.Add("recvTime", "时间"); m_data.Columns.Add("keyContent", "keyContent"); m_data.Columns.Add("keyType", "keyType"); m_data.Columns.Add("recvTimes", "recvTimes"); m_data.Columns.Add("fileCnt", "fileCnt"); m_data.Columns.Add("filetotalSize", "filetotalSize"); m_data.Columns.Add("TableID", "DetailID"); m_data.Columns[0].Width = 15; m_data.Columns[1].Width = 20; m_data.Columns[2].Visible = false; m_data.Columns[3].Width = 60; m_data.Columns[4].Width = 300; m_data.Columns[5].Width = 10; m_data.Columns[6].Width = 30; m_data.Columns[7].Width = 30; m_data.Columns[8].Width = 40; m_data.Columns[9].Width = 10; }
/// <summary> /// 搜索数据库显示出来 2013-07-16 /// </summary> private void ButtonSearch_Click(object sender, EventArgs e) { try { //TorrentFile my = new TorrentFile("1.torrent"); m_data.Rows.Clear(); int selecttype = comboBox_Type.SelectedIndex + 1; int ordertype = comboBox_OrderBy.SelectedIndex + 1; string keyword = textBox_Search.Text; if (keyword == "关键字") { keyword = ""; } int searchindex = Convert.ToInt32(textBox_SearchIndex.Text); int ishanzi = comboBox_Lanague.SelectedIndex; DataSet ds = H31SQL.GetHashPageListFromDB(selecttype, ishanzi, keyword, ordertype, searchindex, MAX_PAGE_SHOW_COUN); Application.DoEvents(); //让系统在百忙之中来响应其他事件 if (ds != null) { int cnt = ds.Tables[0].Rows.Count; for (int i = cnt - 1; i >= 0; i--) { m_data.Rows.Add((cnt - i).ToString(), ds.Tables[0].Rows[i]["ID"].ToString(), ds.Tables[0].Rows[i]["hashKey"].ToString(), ds.Tables[0].Rows[i]["recvTime"].ToString(), ds.Tables[0].Rows[i]["keyContent"].ToString(), ds.Tables[0].Rows[i]["keyType"].ToString(), ds.Tables[0].Rows[i]["recvTimes"].ToString(), ds.Tables[0].Rows[i]["fileCnt"].ToString(), FormatFileSize(Convert.ToDouble(ds.Tables[0].Rows[i]["filetotalSize"].ToString())), ds.Tables[0].Rows[i]["Detail"].ToString()); } if (MAX_PAGE_SHOW_COUN > cnt) { Button_NEXTPAGE.Enabled = false; } else { Button_NEXTPAGE.Enabled = true; } } } catch (System.Exception ex) { H31Debug.PrintLn(ex.StackTrace); } }
//取得种子文件列表存储的地方 private int GetDetailFileTableID() { if (m_nowTableCount > 1000000 || m_nowTableCount == 0) { m_nowTableID = 0; for (int k = 0; k < 10; k++) { int cnt1 = H31SQL.GetHashFileTableNumberCount(k + 1); if (cnt1 < 1000000) { m_nowTableID = k + 1; m_nowTableCount = cnt1; break; } } if (m_nowTableID == 0) { MessageBox.Show("10个种子文件表已经用完了,请手动创建!"); } } return(1); }
/// <summary> /// 选中一行,然后Tips显示文件列表内容 /// </summary> private void m_data_MouseClick(object sender, MouseEventArgs e) { try { DataGridView.HitTestInfo hi; hi = m_data.HitTest(e.X, e.Y); if (hi.RowIndex >= 0) { this.toolTip1.Hide(this); m_data.ClearSelection(); m_data.Rows[hi.RowIndex].Selected = true; Point mousePos = PointToClient(MousePosition);//获取鼠标当前的位置 int hashid = Convert.ToInt32(m_data.Rows[hi.RowIndex].Cells["HashID"].Value.ToString()); int tableid = Convert.ToInt32(m_data.Rows[hi.RowIndex].Cells["TableID"].Value.ToString()); int ordertype = comboBox_OrderBy.SelectedIndex + 1; int ishanzi = comboBox_Lanague.SelectedIndex; DataSet ds = H31SQL.GetHashFileDetail(tableid, hashid, ordertype * 1000 + 10 + ishanzi); Application.DoEvents(); //让系统在百忙之中来响应其他事件 string tip = ""; if (ds != null) { int cnt = ds.Tables[0].Rows.Count; for (int i = 0; i < cnt; i++) { tip = tip + ds.Tables[0].Rows[i]["filename"].ToString() + "\t" + FormatFileSize(Convert.ToDouble(ds.Tables[0].Rows[i]["filesize"].ToString())) + "\r\n"; } } this.toolTip1.Show(tip, this, mousePos);//在指定位置显示提示工具 } else { } } catch (System.Exception ex) { H31Debug.PrintLn(ex.StackTrace); } }
/// <summary> /// 读取线程主函数 2013-06-16 /// </summary> private void GetTheDataDelegate() { if (recvthreadison) { //检测网络状态 if (!isConnected()) { LogTheAction(0, 1, "网络不通,请等待."); recvthreadison = false; return; } try { MainStatusText.Text = string.Format("开始读取:{0}", DateTime.Now.ToString()); if (m_reader == null) { int res2 = GetOneFileDataToMDB(); if (m_reader != null) { m_reader.Close(); m_reader.Dispose(); } } if (string.IsNullOrEmpty(m_readFilename)) { return; } //定位到上次文件读取的地方 m_reader = new StreamReader(Path.Combine(resourceDir, m_readFilename), Encoding.Default); long pos = m_reader.BaseStream.Seek(m_readPos, SeekOrigin.Begin); Int32 ticktime1 = System.Environment.TickCount; string[] strlist = new string[100]; string str1 = m_reader.ReadLine(); int i = 0; while (i < 100 && str1 != null) { if (str1.Length > 1) { if (str1.Length == 40) { m_readPos = m_readPos + str1.Length + 1; } else { m_readPos = m_readPos + str1.Length + 4; } strlist[i] = str1; i++; } str1 = m_reader.ReadLine(); } m_reader.Close(); m_doWorkCnt = m_doWorkCnt + i; int value1 = Convert.ToInt32(m_readPos / 100); MainProgressBar.Value = value1 > MainProgressBar.Maximum ? MainProgressBar.Maximum : value1; Int32 ticktime2 = System.Environment.TickCount; if (m_doWorkCnt % 10000 == 0) { SaveSetting(); LogTheAction(0, 1, "存储到BadList" + m_downBadList.Count.ToString() + "个成功."); } if (i == 0) { LogTheAction(0, 1, m_readFilename + "读取文件完成"); m_fileOKList[m_readFilename] = m_readPos; int res2 = GetOneFileDataToMDB(); recvthreadison = false; return; } //开始处理那么多条HASH for (int k = 0; k < i && recvthreadison; k++) { HASHITEM item1 = new HASHITEM(); //通过正则表达式获取几种不同类型的HASH文件 int res11 = GetHashLineContent(strlist[k], ref item1); if (res11 == 1) { if (m_downBadList.ContainsKey(item1.hashKey)) { continue; } Int32 ticktime3 = System.Environment.TickCount; int detailTableid = 0; int keytype = 0; int ishanzi = 0; bool findexist = false; //先检查本地HASH列表里面是否有,没有就查询数据库里面是否有这一条,如果没有则需要插入,如果有,则需要直接更新次数和日志表 if (m_downOKList.ContainsKey(item1.hashKey)) { if (m_downOKList[item1.hashKey] > 0) { findexist = true; keytype = m_downOKList[item1.hashKey] / 1000; detailTableid = m_downOKList[item1.hashKey] / 10 % 100; ishanzi = m_downOKList[item1.hashKey] % 10; } } if (findexist == false) { int res2 = H31SQL.CheckHashItemExist(item1.hashKey, ref keytype, ref detailTableid, ref ishanzi); } if (detailTableid > 0) { H31SQL.UpdateHashCount(keytype, item1, detailTableid, ishanzi); m_downOKList[item1.hashKey] = keytype * 1000 + detailTableid * 10 + ishanzi; Int32 ticktime4 = System.Environment.TickCount; //LogTheAction(2, 2, ">>>>" + item1.hashKey + "更新到数据库" + item1.keyType.ToString() + "成功" + keytype.ToString() + "TIME:" + (ticktime2 - ticktime1).ToString() + "-" + (ticktime4 - ticktime3).ToString()); } else { Int32 ticktime4 = System.Environment.TickCount; HASHFILEITEM[] filelist = null; //首先去下载种子文件并进行读取 int res = GetDownAndReaHashDetail(item1.hashKey, ref item1, ref filelist); if (res == 0 || (res == 1 && item1.keyContent.Contains("�"))) { continue; } Int32 ticktime5 = System.Environment.TickCount; if (filelist != null && res == 1 && filelist.Length <= MAX_FILEDETAIL_COUNT) { item1.keyWords = ""; ishanzi = ISChineseAndEnglist(item1.keyContent); //插入新的一条HASH数据 int hashID = H31SQL.AddNewHash((HASHTYPE)item1.keyType, item1, m_nowTableID, ishanzi); Int32 ticktime6 = System.Environment.TickCount; if (hashID > 0) { m_downOKList[item1.hashKey] = item1.keyType * 1000 + m_nowTableID * 10 + ishanzi; int real_add = 0; //插入文件列表 for (int m = 0; m < filelist.Length; m++) { filelist[m].hashID = hashID; filelist[m].recvTime = item1.recvTime; //过滤一些没有用的介绍性文件 if (filelist[m].filesize == 0 || (filelist[m].filename).ToLower().Contains("Thumbs.db")) { continue; } int dotpos = filelist[m].filename.LastIndexOf('.'); string str2 = filelist[m].filename.Substring(dotpos + 1, filelist[m].filename.Length - dotpos - 1); if (str2.ToLower() == "url") { continue; } string str3 = filelist[m].filename.Substring(filelist[m].filename.Length - 1, 1); if (str3 == "_") { continue; } //如果是视频就直接不需要一些文件 if ((item1.keyType == (int)HASHTYPE.MOVIE || filelist.Length > 30) && (str2.ToLower() == "mht" || str2.ToLower() == "html" || str2.ToLower() == "htm" || str2.ToLower() == "txt")) { continue; } //过滤文件名字中的网址 filelist[m].filename = GetOneGoodString(filelist[m].filename); int resid = H31SQL.AddNewHashDetail(item1.keyType * 1000 + 10 + ishanzi, filelist[m], m_nowTableID); real_add = real_add + 1; } m_nowTableCount = m_nowTableCount + real_add; GetDetailFileTableID(); Int32 ticktime7 = System.Environment.TickCount; LogTheAction(2, 1, ">>>>" + item1.keyContent + "插入数据库" + (item1.keyType * 1000 + 10 + ishanzi).ToString() + "成功" + filelist.Length.ToString() + "个文件 TIME:" + (ticktime2 - ticktime1).ToString() + "-" + (ticktime4 - ticktime3).ToString() + "-" + (ticktime5 - ticktime4).ToString() + "-" + (ticktime6 - ticktime5).ToString() + "-" + (ticktime7 - ticktime6).ToString()); } } } Application.DoEvents(); //让系统在百忙之中来响应其他事件 } } } catch (System.Exception ex) { H31Debug.PrintLn("GetTheDataDelegate:" + ex.StackTrace); } } else { Thread.Sleep(100); isFirstTimeCheck = true; } this.Text = "已经读取" + m_readFilename + ":" + m_doWorkCnt.ToString() + "行"; MainStatusText.Text = string.Format("读取完成:{0}", DateTime.Now.ToString()); recvthreadison = false; }