private void button_OK_Click(object sender, EventArgs e) { string strError = ""; if (this.listView_index.SelectedItems.Count == 0) { strError = "尚未选定日志记录"; goto ERROR1; } IndexInfo info = (IndexInfo)this.listView_index.SelectedItems[0].Tag; string strLogFilename = this.textBox_logFilename.Text; try { using (Stream stream = File.OpenRead(strLogFilename)) { if (info.Offs > stream.Length) { strError = "info.Offs " + info.Offs.ToString() + " > stream.Length " + stream.Length.ToString(); goto ERROR1; } stream.Seek(info.Offs, SeekOrigin.Begin); this.Package = new byte[info.Length]; int nRet = stream.Read(this.Package, 0, (int)info.Length); } } catch (Exception ex) { strError = "read file '" + strLogFilename + "' error: " + ex.Message; goto ERROR1; } this.DialogResult = DialogResult.OK; this.Close(); return; ERROR1: MessageBox.Show(this, strError); }
// 装载通讯包日志文件的记录索引 int LoadIndex( ListView list, string strLogFilename, out string strError) { strError = ""; Stream stream = null; try { stream = File.OpenRead(strLogFilename); } catch (Exception ex) { strError = "file '" + strLogFilename + "'open error: " + ex.Message; return(-1); } try { list.Items.Clear(); for (long i = 0; ; i++) { byte[] len_buffer = new byte[8]; int nRet = stream.Read(len_buffer, 0, 8); if (nRet == 0) { break; } if (nRet != 8) { strError = "file format error"; return(-1); } long length = BitConverter.ToInt64(len_buffer, 0); if (length == -1) { // 出现了一个未收尾的事项 // 把文件最后都算作它的内容 length = stream.Length - stream.Position; } IndexInfo info = new IndexInfo(); info.index = i; ListViewItem item = new ListViewItem(); if (length == 0) { // 特殊处理 item.Text = i.ToString(); item.ImageIndex = 0; item.Tag = info; list.Items.Add(item); continue; } int direction = stream.ReadByte(); long lStartOffs = stream.Position; length--; // 这是内容长度 item.Text = i.ToString(); // 方向' string strDirection = ""; int nImageIndex = 0; if (direction == 0) { strDirection = "none"; nImageIndex = 0; } else if (direction == 1) { strDirection = "client"; nImageIndex = 1; } else if (direction == 2) { strDirection = "server"; nImageIndex = 2; } else { strDirection = "error direction value: " + ((int)direction).ToString(); nImageIndex = 0; } item.Text += " " + strDirection; item.Text += " len:" + length.ToString(); item.Text += " offs:" + lStartOffs.ToString(); item.ImageIndex = nImageIndex; info.Offs = lStartOffs; info.Length = length; item.Tag = info; list.Items.Add(item); if (length >= 100 * 1024) { stream.Seek(length, SeekOrigin.Current); info.BerTree = null; } else { byte[] baPackage = new byte[(int)length]; stream.Read(baPackage, 0, (int)length); } } } finally { stream.Close(); } return(0); }
// 装载记录索引 int LoadIndex(string strLogFilename, out string strError) { strError = ""; Stream stream = null; try { stream = File.OpenRead(strLogFilename); } catch (Exception ex) { strError = "file '" + strLogFilename + "'open error: " + ex.Message; return(-1); } try { this.treeView_ber.Nodes.Clear(); for (long i = 0; ; i++) { byte[] len_buffer = new byte[8]; int nRet = stream.Read(len_buffer, 0, 8); if (nRet == 0) { break; } if (nRet != 8) { strError = "file format error"; return(-1); } long length = BitConverter.ToInt64(len_buffer, 0); if (length == -1) { // 出现了一个未收尾的事项 // 把文件最后都算作它的内容 length = stream.Length - stream.Position; } IndexInfo info = new IndexInfo(); info.index = i; TreeNode node = new TreeNode(); if (length == 0) { // 特殊处理 node.Text = i.ToString(); node.ImageIndex = 0; node.Tag = info; this.treeView_ber.Nodes.Add(node); continue; } int direction = stream.ReadByte(); long lStartOffs = stream.Position; length--; // 这是内容长度 node.Text = i.ToString(); // 方向' string strDirection = ""; int nImageIndex = 0; if (direction == 0) { strDirection = "none"; nImageIndex = 0; } else if (direction == 1) { strDirection = "client"; nImageIndex = 1; } else if (direction == 2) { strDirection = "server"; nImageIndex = 2; } else { strDirection = "error direction value: " + ((int)direction).ToString(); nImageIndex = 0; } node.Text += " " + strDirection; node.Text += " len:" + length.ToString(); node.Text += " offs:" + lStartOffs.ToString(); node.ImageIndex = nImageIndex; info.Offs = lStartOffs; info.Length = length; node.Tag = info; this.treeView_ber.Nodes.Add(node); if (length >= 100 * 1024) { stream.Seek(length, SeekOrigin.Current); info.BerTree = null; } else { byte [] baPackage = new byte[(int)length]; stream.Read(baPackage, 0, (int)length); int nParseStart = 0; for (int j = 0; ; j++) { BerTree tree = new BerTree(); int nTotlen = 0; tree.m_RootNode.BuildPartTree(baPackage, nParseStart, baPackage.Length, out nTotlen); if (j == 0) { TreeNode newnode = new TreeNode(); node.Nodes.Add(newnode); FillNodeAndChildren(newnode, tree.m_RootNode.ChildrenCollection[0]); } else { TreeNode newnode = new TreeNode(); node.Nodes.Add(newnode); FillNodeAndChildren(newnode, tree.m_RootNode.ChildrenCollection[0]); } nParseStart += nTotlen; if (nParseStart >= baPackage.Length) { break; } } } } } finally { stream.Close(); } return(0); }
private void treeView_ber_AfterSelect(object sender, TreeViewEventArgs e) { string strError = ""; TreeNode node = this.treeView_ber.SelectedNode; if (node == null) { SetRightBlank(); return; } TreeNode topnode = null; if (node.Parent != null) { topnode = node; while (topnode.Parent != null) { topnode = topnode.Parent; } } else { topnode = node; } { IndexInfo info = (IndexInfo)topnode.Tag; Debug.Assert(info != null, ""); if (info.Length == -1 || info.Offs == -1) { SetRightBlank(); return; } string strLogFilename = this.textBox_logFilename.Text; try { using (Stream stream = File.OpenRead(strLogFilename)) { if (info.Offs != this.CurrentRightStartOffs) { this.binaryEditor_onePackage.SetData(stream, info.Offs, info.Length); this.CurrentRightStartOffs = info.Offs; } } } catch (Exception ex) { strError = "file '" + strLogFilename + "'open error: " + ex.Message; goto ERROR1; } } return; ERROR1: MessageBox.Show(this, strError); }
// 装载通讯包日志文件的记录索引 int LoadIndex( ListView list, string strLogFilename, out string strError) { strError = ""; Stream stream = null; try { stream = File.OpenRead(strLogFilename); } catch (Exception ex) { strError = "file '" + strLogFilename + "'open error: " + ex.Message; return -1; } try { list.Items.Clear(); for (long i = 0; ; i++) { byte[] len_buffer = new byte[8]; int nRet = stream.Read(len_buffer, 0, 8); if (nRet == 0) break; if (nRet != 8) { strError = "file format error"; return -1; } long length = BitConverter.ToInt64(len_buffer, 0); if (length == -1) { // 出现了一个未收尾的事项 // 把文件最后都算作它的内容 length = stream.Length - stream.Position; } IndexInfo info = new IndexInfo(); info.index = i; ListViewItem item = new ListViewItem(); if (length == 0) { // 特殊处理 item.Text = i.ToString(); item.ImageIndex = 0; item.Tag = info; list.Items.Add(item); continue; } int direction = stream.ReadByte(); long lStartOffs = stream.Position; length--; // 这是内容长度 item.Text = i.ToString(); // 方向' string strDirection = ""; int nImageIndex = 0; if (direction == 0) { strDirection = "none"; nImageIndex = 0; } else if (direction == 1) { strDirection = "client"; nImageIndex = 1; } else if (direction == 2) { strDirection = "server"; nImageIndex = 2; } else { strDirection = "error direction value: " + ((int)direction).ToString(); nImageIndex = 0; } item.Text += " " + strDirection; item.Text += " len:" + length.ToString(); item.Text += " offs:" + lStartOffs.ToString(); item.ImageIndex = nImageIndex; info.Offs = lStartOffs; info.Length = length; item.Tag = info; list.Items.Add(item); if (length >= 100 * 1024) { stream.Seek(length, SeekOrigin.Current); info.BerTree = null; } else { byte[] baPackage = new byte[(int)length]; stream.Read(baPackage, 0, (int)length); } } } finally { stream.Close(); } return 0; }
// 装载记录索引 int LoadIndex(string strLogFilename, out string strError) { strError = ""; Stream stream = null; try { stream = File.OpenRead(strLogFilename); } catch (Exception ex) { strError = "file '" + strLogFilename + "'open error: " + ex.Message; return -1; } try { this.treeView_ber.Nodes.Clear(); for (long i = 0; ; i++) { byte[] len_buffer = new byte[8]; int nRet = stream.Read(len_buffer, 0, 8); if (nRet == 0) break; if (nRet != 8) { strError = "file format error"; return -1; } long length = BitConverter.ToInt64(len_buffer, 0); if (length == -1) { // 出现了一个未收尾的事项 // 把文件最后都算作它的内容 length = stream.Length - stream.Position; } IndexInfo info = new IndexInfo(); info.index = i; TreeNode node = new TreeNode(); if (length == 0) { // 特殊处理 node.Text = i.ToString(); node.ImageIndex = 0; node.Tag = info; this.treeView_ber.Nodes.Add(node); continue; } int direction = stream.ReadByte(); long lStartOffs = stream.Position; length--; // 这是内容长度 node.Text = i.ToString(); // 方向' string strDirection = ""; int nImageIndex = 0; if (direction == 0) { strDirection = "none"; nImageIndex = 0; } else if (direction == 1) { strDirection = "client"; nImageIndex = 1; } else if (direction == 2) { strDirection = "server"; nImageIndex = 2; } else { strDirection = "error direction value: " + ((int)direction).ToString(); nImageIndex = 0; } node.Text += " " + strDirection; node.Text += " len:" + length.ToString(); node.Text += " offs:" + lStartOffs.ToString(); node.ImageIndex = nImageIndex; info.Offs = lStartOffs; info.Length = length; node.Tag = info; this.treeView_ber.Nodes.Add(node); if (length >= 100*1024) { stream.Seek(length, SeekOrigin.Current); info.BerTree = null; } else { byte [] baPackage = new byte[(int)length]; stream.Read(baPackage, 0, (int)length); int nParseStart = 0; for (int j=0; ;j++ ) { BerTree tree = new BerTree(); int nTotlen = 0; tree.m_RootNode.BuildPartTree(baPackage, nParseStart, baPackage.Length, out nTotlen); if (j == 0) { TreeNode newnode = new TreeNode(); node.Nodes.Add(newnode); FillNodeAndChildren(newnode, tree.m_RootNode.ChildrenCollection[0]); } else { TreeNode newnode = new TreeNode(); node.Nodes.Add(newnode); FillNodeAndChildren(newnode, tree.m_RootNode.ChildrenCollection[0]); } nParseStart += nTotlen; if (nParseStart >= baPackage.Length) break; } } } } finally { stream.Close(); } return 0; }