日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#二进制文件编程实践

發(fā)布時間:2025/4/14 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#二进制文件编程实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C#讀寫二進(jìn)制文件

http://www.cnblogs.com/top5/archive/2011/02/07/1949675.html
本文要介紹的C#本地讀寫二進(jìn)制文件,二進(jìn)制文件指保存在物理磁盤的一個文件。


第一步:讀寫文件轉(zhuǎn)成流對象。其實就是讀寫文件流 (FileStream對象,在System.IO命名空間中)。File、FileInfo、FileStream這三個類可以將打開文件,并變成文件 流。下面是引用微軟對File、FileInfo、FileStream的介紹
System.IO.File類 提供用于創(chuàng)建、復(fù)制、刪除、移動和打開文件的靜態(tài)方法,并協(xié)助創(chuàng)建 FileStream 對象。
System.IO.FileInfo類 提供創(chuàng)建、復(fù)制、刪除、移動和打開文件的實例方法,并且?guī)椭鷦?chuàng)建 FileStream 對象。無法繼承此類。
System.IO.FileStream類 公開以文件為主的 Stream,既支持同步讀寫操作,也支持異步讀寫操作。
我直接使用 FileStream,他繼承于Stream


第二步:讀寫流。讀寫二進(jìn)制文件用System.IO.BinaryReader和System.IO.BinaryWriter類;讀寫文本文件用System.IO.TextReader和System.IO.TextWriter類。下面是我的實體 (即要保持到文件的數(shù)據(jù))
? /// <summary>
?/// 學(xué)生基本信息類
?/// </summary>
?public class Student
?{
? /// <summary>
? /// 學(xué)號變量
? /// </summary>
? private String _id;
? /// <summary>
? /// 姓名變量
? /// </summary>
? private String _name;
? /// <summary>
? /// 語文成績變量
? /// </summary>
? private Double _score1;
? /// <summary>
? /// 數(shù)學(xué)成績變量
? /// </summary>
? private Double _score2;
? /// <summary>
? /// 英語成績變量
? /// </summary>
? private Double _score3;


? /// <summary>
? /// 學(xué)號屬性
? /// </summary>
? public String Id
? {
? ?get { return _id; }
? ?set { _id = value; }
? }
? /// <summary>
? /// 姓名屬性
? /// </summary>
? public String Name
? {
? ?get { return _name; }
? ?set { _name = value; }
? }
? /// <summary>
? /// 語文成績屬性
? /// </summary>
? public Double Score1
? {
? ?get { return _score1; }
? ?set { _score1 = value; }
? }
? /// <summary>
? /// 數(shù)學(xué)成績屬性
? /// </summary>
? public Double Score2
? {
? ?get { return _score2; }
? ?set { _score2 = value; }
? }
? /// <summary>
? /// 英語成績屬性
? /// </summary>
? public Double Score3
? {
? ?get { return _score3; }
? ?set { _score3 = value; }
? }
?}
?下面是我的讀方法,讀取文件中的信息到參數(shù)List<Student> stu中 ?


? /// <summary>
? /// 讀取信息方法
? /// </summary>
? /// <returns>讀取是否成功</returns>
? public void ReadInfo(List<Student> stu)
? {
? ?Console.WriteLine("請輸入文件讀取路徑:(鍵入回車為默認(rèn)路徑)");
? ?String filename = Console.ReadLine();
? ?FileStream fs;
? ?//默認(rèn)路徑
? ?if (filename == "")
? ?{
? ? fs = new FileStream("student.dll", FileMode.Open);
? ?}
? ?else
? ?{
? ? //如果文件不存在,就提示錯誤
? ? if (!File.Exists(filename))
? ? {
? ? ?Console.WriteLine("\n\t讀取失敗!\n錯誤原因:可能不存在此文件");
? ? ?return;
? ? }
? ? //否則創(chuàng)建文件
? ? fs = new FileStream(filename, FileMode.Open);
? ?}
? ?//使用二進(jìn)制讀取
? ?BinaryReader br = new BinaryReader(fs);
? ?Console.Write("讀取信息將覆蓋現(xiàn)有的信息,繼續(xù)嗎?y/n :");
? ?String command = Console.ReadLine();
? ?if (command == "y" || command == "Y")
? ?{
? ? for (int i = 0; i < stu.Count; i++)
? ? {
? ? ?stu.RemoveAt(i);
? ? }
? ? //從磁盤上讀取信息
? ? try
? ? {
? ? ?while (true)
? ? ?{
? ? ? Student student = new Student();
? ? ? student.Id = br.ReadString();
? ? ? student.Name = br.ReadString();
? ? ? student.Score1 = br.ReadDouble();
? ? ? student.Score2 = br.ReadDouble();
? ? ? student.Score3 = br.ReadDouble();
? ? ? stu.Add(student);
? ? ? student = null;
? ? ?}
? ? }
? ? catch (Exception)
? ? {
? ? ?Console.WriteLine("\n\n讀取結(jié)束!");
? ? }
? ?}
? ?br.Close();
? ?fs.Close();
? }

下面是我的寫入方法,寫入?yún)?shù)List<Student> stu中的數(shù)據(jù)

? /// <summary>
? /// 寫入信息方法
? /// </summary>
? /// <returns>寫入是否成功</returns>
? public void WriteInfo(List<Student> stu)
? {
? ?Console.WriteLine("請輸入文件保存路徑:(鍵入回車為默認(rèn)路徑)");
? ?FileStream fs;
? ?String filename = Console.ReadLine();
? ?//默認(rèn)路徑
? ?if (filename == "")
? ?{
? ? fs = new FileStream("student.dll", FileMode.Create);
? ?}
? ?//手動輸入路徑
? ?else
? ?{
? ? //如果文件存在,就提示錯誤
? ? if (File.Exists(filename))
? ? {
? ? ?Console.WriteLine("\n\t保存失敗!\n錯誤原因:可能存在相同文件");
? ? ?return;
? ? }
? ? //否則創(chuàng)建文件
? ? fs = new FileStream(filename, FileMode.Create);
? ?}
? ?//數(shù)據(jù)保存到磁盤中
? ?BinaryWriter bw = new BinaryWriter(fs);
? ?foreach (Student student in stu)
? ?{
? ? bw.Write((String)student.Id);
? ? bw.Write((String)student.Name);
? ? bw.Write((Double)student.Score1);
? ? bw.Write((Double)student.Score2);
? ? bw.Write((Double)student.Score3);
? ? bw.Flush();
? ?}
? ?bw.Close();
? ?fs.Close();
? ?Console.WriteLine("保存成功!");
? }
========

C#二進(jìn)制文件比較程序

http://blog.csdn.net/foart/article/details/7031577
轉(zhuǎn):http://www.cnblogs.com/hbhbice/archive/2010/06/30/1768477.html


下面是CompareFile.cs


[csharp] view plain copy print?
using System; ?
?using System.Collections.Generic; ?
?using System.Text; ?
?using System.IO; ?
?using System.Windows.Forms; ?
?using System.Data; ?
? ?
?namespace CompareFile ?
?{ ?
? ? ?public ?class FileCompare ?
? ? ?{ ?
? ? ? ? ?private FileStream fs1, fs2; ?
? ? ? ? ?private DataTable _DiffTab1,_DiffTab2; ?
? ?
? ? ? ? ?public DataTable DiffTab1 ?
? ? ? ? ?{ ?
? ? ? ? ? ? ?get { ?
? ? ? ? ? ? ? ? ?return _DiffTab1; ?
? ? ? ? ? ? ?} ?
? ? ? ? ?} ?
? ?
? ? ? ? ?public DataTable DiffTab2 ?
? ? ? ? ?{ ?
? ? ? ? ? ? ?get ?
? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ?return _DiffTab2; ?
? ? ? ? ? ? ?} ?
? ? ? ? ?} ?
? ?
? ? ? ? ?public FileCompare(FileStream fs1, FileStream fs2) ?
? ? ? ? ?{ ?
? ? ? ? ? ? ?this.fs1 = fs1; ?
? ? ? ? ? ? ?this.fs2 = fs2; ?
? ? ? ? ?} ?
? ?
? ? ? ? ?public void CompareAllFile() ?
? ? ? ? ?{ ?
? ? ? ? ? ? ?if (fs1 .Length !=fs2.Length ) ?
? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ?if (MessageBox.Show("兩文件長度不等\r\n文件1長:" + fs1.Length.ToString() + "\r\n文件2長:" + fs2.Length.ToString() + "\r\n是否繼續(xù)比較?", "文件比較結(jié)果") == DialogResult.Cancel ) ?
? ? ? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ? ?return; ?
? ? ? ? ? ? ? ? ?} ?
? ? ? ? ? ? ?} ?
? ? ? ? ? ? ?BinaryReader br1 = new BinaryReader (fs1 ); ?
? ? ? ? ? ? ?BinaryReader br2 = new BinaryReader (fs2); ?
? ? ? ? ? ? ?long min = fs1.Length >= fs2.Length ? fs2.Length : fs1.Length; ?
? ? ? ? ? ? ?for (long i = 0; i <min ? ; i++) ?
? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ?if ( br1 .ReadByte ()!=br2 .ReadByte ()) ?
? ? ? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ? ?if (MessageBox.Show("從0起,第" + (br1.BaseStream.Position - 1).ToString() + "個字節(jié)不匹配" + "是否繼續(xù)搜尋?", "文件比較",MessageBoxButtons.OKCancel) == DialogResult.OK) ?
? ? ? ? ? ? ? ? ? ? ?{ ?
? ?
? ? ? ? ? ? ? ? ? ? ?} ?
? ? ? ? ? ? ? ? ? ? ?else ??
? ? ? ? ? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ? ? ? ?br1.BaseStream.Seek((br1.BaseStream.Position / 50) * 50, 0); ?
? ? ? ? ? ? ? ? ? ? ? ? ?br2.BaseStream.Seek((br1.BaseStream.Position / 50) * 50, 0); ?
? ? ? ? ? ? ? ? ? ? ? ? ?if (br1 .BaseStream .Length - br1 .BaseStream .Position >50&&br2 .BaseStream .Length - br2 .BaseStream .Position >50) ?
? ? ? ? ? ? ? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_DiffTab1 = new DataTable(); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_DiffTab2 = new DataTable(); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DataColumn dc1 = new DataColumn("位置"); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DataColumn dc2 = new DataColumn("數(shù)值"); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DataColumn dc3 = new DataColumn("位置"); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DataColumn dc4 = new DataColumn("數(shù)值"); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_DiffTab1.Columns.Add(dc1); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_DiffTab1.Columns.Add(dc2); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_DiffTab2.Columns.Add(dc3); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_DiffTab2.Columns.Add(dc4); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?for (int j = 0; j < 50; j++) ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DataRow dr1 = _DiffTab1.NewRow(); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dr1[0] = br1.BaseStream.Position; ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dr1[1] = br1.ReadByte(); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DiffTab1.Rows.Add(dr1); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DataRow dr2 = _DiffTab2.NewRow(); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dr2[0] = br2.BaseStream.Position; ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dr2[1] = br2.ReadByte(); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DiffTab2.Rows.Add(dr2); ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?} ?
? ? ? ? ? ? ? ? ? ? ? ? ?} ?
? ? ? ? ? ? ? ? ? ? ? ? ?return; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ?} ? ?
? ?
? ? ? ? ? ? ? ? ?} ?
? ? ? ? ? ? ? ? ?if (fs1.Position == min ) ?
? ? ? ? ? ? ? ? ?{ ?
? ? ? ? ? ? ? ? ? ? ?MessageBox.Show("到達(dá)兩文件中較小文件的尾部"); ?
? ? ? ? ? ? ? ? ?} ?
? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? ? ??
? ?
? ? ? ? ?} ?
? ? ?} ?
?} ?

Form1.cs
[csharp] view plain copy print?
using System; ?
using System.Collections.Generic; ?
using System.ComponentModel; ?
using System.Data; ?
using System.Drawing; ?
using System.Text; ?
using System.Windows.Forms; ?
using System.IO; ?
??
namespace CompareFile ?
{ ?
? ? public partial class Form1 : Form ?
? ? { ?
? ? ? ? FileStream fs1; ?
? ? ? ? FileStream fs2; ?
??
? ? ? ? public Form1() ?
? ? ? ? { ?
? ? ? ? ? ? InitializeComponent(); ?
? ? ? ? } ?
??
? ? ? ? private void 打開OToolStripMenuItem_Click(object sender, EventArgs e) ?
? ? ? ? { ?
? ? ? ? ? ? if (openFileDialog1 .ShowDialog ()== DialogResult .OK ) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? fs1 = (FileStream )openFileDialog1.OpenFile(); ?
? ? ? ? ? ? } ?
? ? ? ? } ?
??
? ? ? ? private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) ?
? ? ? ? { ?
? ? ? ? ? ? if (openFileDialog1.ShowDialog ()== DialogResult .OK ) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? fs2 = (FileStream )openFileDialog1.OpenFile(); ?
? ? ? ? ? ? } ?
? ? ? ? } ?
??
? ? ? ? private void 自定義CToolStripMenuItem_Click(object sender, EventArgs e) ?
? ? ? ? { ?
? ? ? ? ? ? if (fs1 != null && fs2 != null) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? CompareFile.FileCompare fc = new CompareFile.FileCompare(fs1, fs2); ?
? ? ? ? ? ? ? ? fc.CompareAllFile(); ?
? ? ? ? ? ? ? ? dataGridView1.DataSource = fc.DiffTab1; ?
? ? ? ? ? ? ? ? dataGridView2.DataSource = fc.DiffTab2; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? else ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? MessageBox.Show ("請先將兩個文件打開,然后再進(jìn)行比較!"); ?
? ? ? ? ? ? } ?
??
? ? ? ? } ?
??
? ? ? ? private void 另存為AToolStripMenuItem_Click(object sender, EventArgs e) ?
? ? ? ? { ?
? ? ? ? ? ? fs1.Close(); ?
? ? ? ? ? ? fs2.Close(); ?
??
? ? ? ? } ? ?
? ? } ?
} ?


Form1.Designer.cs(如果界面方面不清楚,參考以下代碼。)


[csharp] view plain copy print?
namespace CompareFile ?
{ ?
? ? partial class Form1 ?
? ? { ?
? ? ? ? /// <summary> ?
? ? ? ? /// 必需的設(shè)計器變量。 ?
? ? ? ? /// </summary> ?
? ? ? ? private System.ComponentModel.IContainer components = null; ?
??
? ? ? ? /// <summary> ?
? ? ? ? /// 清理所有正在使用的資源。 ?
? ? ? ? /// </summary> ?
? ? ? ? /// <param name="disposing">如果應(yīng)釋放托管資源,為 true;否則為 false。</param> ?
? ? ? ? protected override void Dispose(bool disposing) ?
? ? ? ? { ?
? ? ? ? ? ? if (disposing && (components != null)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? components.Dispose(); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? base.Dispose(disposing); ?
? ? ? ? } ?
?
? ? ? ? #region Windows 窗體設(shè)計器生成的代碼 ?
??
? ? ? ? /// <summary> ?
? ? ? ? /// 設(shè)計器支持所需的方法 - 不要 ?
? ? ? ? /// 使用代碼編輯器修改此方法的內(nèi)容。 ?
? ? ? ? /// </summary> ?
? ? ? ? private void InitializeComponent() ?
? ? ? ? { ?
? ? ? ? ? ? System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); ?
? ? ? ? ? ? this.menuStrip1 = new System.Windows.Forms.MenuStrip(); ?
? ? ? ? ? ? this.文件FToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.新建NToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.打開OToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.保存SToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); ?
? ? ? ? ? ? this.另存為AToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); ?
? ? ? ? ? ? this.打印PToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); ?
? ? ? ? ? ? this.退出XToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.編輯EToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.撤消UToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.重復(fù)RToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); ?
? ? ? ? ? ? this.剪切TToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); ?
? ? ? ? ? ? this.全選AToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.工具TToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.自定義CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.選項OToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.幫助HToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.內(nèi)容CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.索引IToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.搜索SToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); ?
? ? ? ? ? ? this.關(guān)于AToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ?
? ? ? ? ? ? this.splitContainer1 = new System.Windows.Forms.SplitContainer(); ?
? ? ? ? ? ? this.dataGridView1 = new System.Windows.Forms.DataGridView(); ?
? ? ? ? ? ? this.dataGridView2 = new System.Windows.Forms.DataGridView(); ?
? ? ? ? ? ? this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); ?
? ? ? ? ? ? this.toolStrip1 = new System.Windows.Forms.ToolStrip(); ?
? ? ? ? ? ? this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); ?
? ? ? ? ? ? this.menuStrip1.SuspendLayout(); ?
? ? ? ? ? ? this.splitContainer1.Panel1.SuspendLayout(); ?
? ? ? ? ? ? this.splitContainer1.Panel2.SuspendLayout(); ?
? ? ? ? ? ? this.splitContainer1.SuspendLayout(); ?
? ? ? ? ? ? ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); ?
? ? ? ? ? ? ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit(); ?
? ? ? ? ? ? this.toolStrip1.SuspendLayout(); ?
? ? ? ? ? ? this.SuspendLayout(); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // menuStrip1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ?
? ? ? ? ? ? this.文件FToolStripMenuItem, ?
? ? ? ? ? ? this.編輯EToolStripMenuItem, ?
? ? ? ? ? ? this.工具TToolStripMenuItem, ?
? ? ? ? ? ? this.幫助HToolStripMenuItem}); ?
? ? ? ? ? ? this.menuStrip1.Location = new System.Drawing.Point(0, 0); ?
? ? ? ? ? ? this.menuStrip1.Name = "menuStrip1"; ?
? ? ? ? ? ? this.menuStrip1.Size = new System.Drawing.Size(676, 24); ?
? ? ? ? ? ? this.menuStrip1.TabIndex = 0; ?
? ? ? ? ? ? this.menuStrip1.Text = "menuStrip1"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 文件FToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.文件FToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { ?
? ? ? ? ? ? this.新建NToolStripMenuItem, ?
? ? ? ? ? ? this.打開OToolStripMenuItem, ?
? ? ? ? ? ? this.保存SToolStripMenuItem, ?
? ? ? ? ? ? this.toolStripSeparator, ?
? ? ? ? ? ? this.另存為AToolStripMenuItem, ?
? ? ? ? ? ? this.toolStripSeparator1, ?
? ? ? ? ? ? this.打印PToolStripMenuItem, ?
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem, ?
? ? ? ? ? ? this.toolStripSeparator2, ?
? ? ? ? ? ? this.退出XToolStripMenuItem}); ?
? ? ? ? ? ? this.文件FToolStripMenuItem.Name = "文件FToolStripMenuItem"; ?
? ? ? ? ? ? this.文件FToolStripMenuItem.Size = new System.Drawing.Size(59, 20); ?
? ? ? ? ? ? this.文件FToolStripMenuItem.Text = "文件(&F)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 新建NToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.新建NToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("新建NToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.新建NToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.新建NToolStripMenuItem.Name = "新建NToolStripMenuItem"; ?
? ? ? ? ? ? this.新建NToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); ?
? ? ? ? ? ? this.新建NToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.新建NToolStripMenuItem.Text = "新建(&N)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 打開OToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.打開OToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("打開OToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.打開OToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.打開OToolStripMenuItem.Name = "打開OToolStripMenuItem"; ?
? ? ? ? ? ? this.打開OToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); ?
? ? ? ? ? ? this.打開OToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.打開OToolStripMenuItem.Text = "打開文件1(&O)"; ?
? ? ? ? ? ? this.打開OToolStripMenuItem.Click += new System.EventHandler(this.打開OToolStripMenuItem_Click); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 保存SToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.保存SToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.保存SToolStripMenuItem.Name = "保存SToolStripMenuItem"; ?
? ? ? ? ? ? this.保存SToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); ?
? ? ? ? ? ? this.保存SToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.保存SToolStripMenuItem.Text = "打開文件2(&S)"; ?
? ? ? ? ? ? this.保存SToolStripMenuItem.Click += new System.EventHandler(this.保存SToolStripMenuItem_Click); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripSeparator ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripSeparator.Name = "toolStripSeparator"; ?
? ? ? ? ? ? this.toolStripSeparator.Size = new System.Drawing.Size(187, 6); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 另存為AToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.另存為AToolStripMenuItem.Name = "另存為AToolStripMenuItem"; ?
? ? ? ? ? ? this.另存為AToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.另存為AToolStripMenuItem.Text = "關(guān)閉兩文件(&A)"; ?
? ? ? ? ? ? this.另存為AToolStripMenuItem.Click += new System.EventHandler(this.另存為AToolStripMenuItem_Click); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripSeparator1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripSeparator1.Name = "toolStripSeparator1"; ?
? ? ? ? ? ? this.toolStripSeparator1.Size = new System.Drawing.Size(187, 6); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 打印PToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.打印PToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("打印PToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.打印PToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.打印PToolStripMenuItem.Name = "打印PToolStripMenuItem"; ?
? ? ? ? ? ? this.打印PToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P))); ?
? ? ? ? ? ? this.打印PToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.打印PToolStripMenuItem.Text = "打印(&P)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 打印預(yù)覽VToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("打印預(yù)覽VToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem.Name = "打印預(yù)覽VToolStripMenuItem"; ?
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.打印預(yù)覽VToolStripMenuItem.Text = "打印預(yù)覽(&V)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripSeparator2 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripSeparator2.Name = "toolStripSeparator2"; ?
? ? ? ? ? ? this.toolStripSeparator2.Size = new System.Drawing.Size(187, 6); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 退出XToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.退出XToolStripMenuItem.Name = "退出XToolStripMenuItem"; ?
? ? ? ? ? ? this.退出XToolStripMenuItem.Size = new System.Drawing.Size(190, 22); ?
? ? ? ? ? ? this.退出XToolStripMenuItem.Text = "退出(&X)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 編輯EToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.編輯EToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { ?
? ? ? ? ? ? this.撤消UToolStripMenuItem, ?
? ? ? ? ? ? this.重復(fù)RToolStripMenuItem, ?
? ? ? ? ? ? this.toolStripSeparator3, ?
? ? ? ? ? ? this.剪切TToolStripMenuItem, ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem, ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem, ?
? ? ? ? ? ? this.toolStripSeparator4, ?
? ? ? ? ? ? this.全選AToolStripMenuItem}); ?
? ? ? ? ? ? this.編輯EToolStripMenuItem.Name = "編輯EToolStripMenuItem"; ?
? ? ? ? ? ? this.編輯EToolStripMenuItem.Size = new System.Drawing.Size(60, 20); ?
? ? ? ? ? ? this.編輯EToolStripMenuItem.Text = "編輯(&E)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 撤消UToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.撤消UToolStripMenuItem.Name = "撤消UToolStripMenuItem"; ?
? ? ? ? ? ? this.撤消UToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); ?
? ? ? ? ? ? this.撤消UToolStripMenuItem.Size = new System.Drawing.Size(156, 22); ?
? ? ? ? ? ? this.撤消UToolStripMenuItem.Text = "撤消(&U)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 重復(fù)RToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.重復(fù)RToolStripMenuItem.Name = "重復(fù)RToolStripMenuItem"; ?
? ? ? ? ? ? this.重復(fù)RToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); ?
? ? ? ? ? ? this.重復(fù)RToolStripMenuItem.Size = new System.Drawing.Size(156, 22); ?
? ? ? ? ? ? this.重復(fù)RToolStripMenuItem.Text = "重復(fù)(&R)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripSeparator3 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripSeparator3.Name = "toolStripSeparator3"; ?
? ? ? ? ? ? this.toolStripSeparator3.Size = new System.Drawing.Size(153, 6); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 剪切TToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.剪切TToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("剪切TToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.剪切TToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.剪切TToolStripMenuItem.Name = "剪切TToolStripMenuItem"; ?
? ? ? ? ? ? this.剪切TToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); ?
? ? ? ? ? ? this.剪切TToolStripMenuItem.Size = new System.Drawing.Size(156, 22); ?
? ? ? ? ? ? this.剪切TToolStripMenuItem.Text = "剪切(&T)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 復(fù)制CToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("復(fù)制CToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem.Name = "復(fù)制CToolStripMenuItem"; ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem.Size = new System.Drawing.Size(156, 22); ?
? ? ? ? ? ? this.復(fù)制CToolStripMenuItem.Text = "復(fù)制(&C)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 粘貼PToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.粘貼PToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("粘貼PToolStripMenuItem.Image"))); ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem.Name = "粘貼PToolStripMenuItem"; ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem.Size = new System.Drawing.Size(156, 22); ?
? ? ? ? ? ? this.粘貼PToolStripMenuItem.Text = "粘貼(&P)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripSeparator4 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripSeparator4.Name = "toolStripSeparator4"; ?
? ? ? ? ? ? this.toolStripSeparator4.Size = new System.Drawing.Size(153, 6); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 全選AToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.全選AToolStripMenuItem.Name = "全選AToolStripMenuItem"; ?
? ? ? ? ? ? this.全選AToolStripMenuItem.Size = new System.Drawing.Size(156, 22); ?
? ? ? ? ? ? this.全選AToolStripMenuItem.Text = "全選(&A)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 工具TToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.工具TToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { ?
? ? ? ? ? ? this.自定義CToolStripMenuItem, ?
? ? ? ? ? ? this.選項OToolStripMenuItem}); ?
? ? ? ? ? ? this.工具TToolStripMenuItem.Name = "工具TToolStripMenuItem"; ?
? ? ? ? ? ? this.工具TToolStripMenuItem.Size = new System.Drawing.Size(61, 20); ?
? ? ? ? ? ? this.工具TToolStripMenuItem.Text = "工具(&T)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 自定義CToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.自定義CToolStripMenuItem.Name = "自定義CToolStripMenuItem"; ?
? ? ? ? ? ? this.自定義CToolStripMenuItem.Size = new System.Drawing.Size(117, 22); ?
? ? ? ? ? ? this.自定義CToolStripMenuItem.Text = "比較(&C)"; ?
? ? ? ? ? ? this.自定義CToolStripMenuItem.Click += new System.EventHandler(this.自定義CToolStripMenuItem_Click); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 選項OToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.選項OToolStripMenuItem.Name = "選項OToolStripMenuItem"; ?
? ? ? ? ? ? this.選項OToolStripMenuItem.Size = new System.Drawing.Size(117, 22); ?
? ? ? ? ? ? this.選項OToolStripMenuItem.Text = "選項(&O)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 幫助HToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.幫助HToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { ?
? ? ? ? ? ? this.內(nèi)容CToolStripMenuItem, ?
? ? ? ? ? ? this.索引IToolStripMenuItem, ?
? ? ? ? ? ? this.搜索SToolStripMenuItem, ?
? ? ? ? ? ? this.toolStripSeparator5, ?
? ? ? ? ? ? this.關(guān)于AToolStripMenuItem}); ?
? ? ? ? ? ? this.幫助HToolStripMenuItem.Name = "幫助HToolStripMenuItem"; ?
? ? ? ? ? ? this.幫助HToolStripMenuItem.Size = new System.Drawing.Size(61, 20); ?
? ? ? ? ? ? this.幫助HToolStripMenuItem.Text = "幫助(&H)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 內(nèi)容CToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.內(nèi)容CToolStripMenuItem.Name = "內(nèi)容CToolStripMenuItem"; ?
? ? ? ? ? ? this.內(nèi)容CToolStripMenuItem.Size = new System.Drawing.Size(128, 22); ?
? ? ? ? ? ? this.內(nèi)容CToolStripMenuItem.Text = "內(nèi)容(&C)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 索引IToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.索引IToolStripMenuItem.Name = "索引IToolStripMenuItem"; ?
? ? ? ? ? ? this.索引IToolStripMenuItem.Size = new System.Drawing.Size(128, 22); ?
? ? ? ? ? ? this.索引IToolStripMenuItem.Text = "索引(&I)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 搜索SToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.搜索SToolStripMenuItem.Name = "搜索SToolStripMenuItem"; ?
? ? ? ? ? ? this.搜索SToolStripMenuItem.Size = new System.Drawing.Size(128, 22); ?
? ? ? ? ? ? this.搜索SToolStripMenuItem.Text = "搜索(&S)"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripSeparator5 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripSeparator5.Name = "toolStripSeparator5"; ?
? ? ? ? ? ? this.toolStripSeparator5.Size = new System.Drawing.Size(125, 6); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // 關(guān)于AToolStripMenuItem ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.關(guān)于AToolStripMenuItem.Name = "關(guān)于AToolStripMenuItem"; ?
? ? ? ? ? ? this.關(guān)于AToolStripMenuItem.Size = new System.Drawing.Size(128, 22); ?
? ? ? ? ? ? this.關(guān)于AToolStripMenuItem.Text = "關(guān)于(&A)..."; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // splitContainer1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; ?
? ? ? ? ? ? this.splitContainer1.Location = new System.Drawing.Point(0, 24); ?
? ? ? ? ? ? this.splitContainer1.Name = "splitContainer1"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // splitContainer1.Panel1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.splitContainer1.Panel1.Controls.Add(this.dataGridView1); ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // splitContainer1.Panel2 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.splitContainer1.Panel2.Controls.Add(this.dataGridView2); ?
? ? ? ? ? ? this.splitContainer1.Size = new System.Drawing.Size(676, 528); ?
? ? ? ? ? ? this.splitContainer1.SplitterDistance = 326; ?
? ? ? ? ? ? this.splitContainer1.TabIndex = 1; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // dataGridView1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; ?
? ? ? ? ? ? this.dataGridView1.Location = new System.Drawing.Point(0, 28); ?
? ? ? ? ? ? this.dataGridView1.Name = "dataGridView1"; ?
? ? ? ? ? ? this.dataGridView1.RowTemplate.Height = 23; ?
? ? ? ? ? ? this.dataGridView1.Size = new System.Drawing.Size(326, 500); ?
? ? ? ? ? ? this.dataGridView1.TabIndex = 0; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // dataGridView2 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.dataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; ?
? ? ? ? ? ? this.dataGridView2.Location = new System.Drawing.Point(0, 28); ?
? ? ? ? ? ? this.dataGridView2.Name = "dataGridView2"; ?
? ? ? ? ? ? this.dataGridView2.RowTemplate.Height = 23; ?
? ? ? ? ? ? this.dataGridView2.Size = new System.Drawing.Size(346, 500); ?
? ? ? ? ? ? this.dataGridView2.TabIndex = 0; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // openFileDialog1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.openFileDialog1.FileName = "openFileDialog1"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStrip1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ?
? ? ? ? ? ? this.toolStripButton1}); ?
? ? ? ? ? ? this.toolStrip1.Location = new System.Drawing.Point(0, 24); ?
? ? ? ? ? ? this.toolStrip1.Name = "toolStrip1"; ?
? ? ? ? ? ? this.toolStrip1.Size = new System.Drawing.Size(676, 25); ?
? ? ? ? ? ? this.toolStrip1.TabIndex = 2; ?
? ? ? ? ? ? this.toolStrip1.Text = "toolStrip1"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // toolStripButton1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; ?
? ? ? ? ? ? this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image"))); ?
? ? ? ? ? ? this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; ?
? ? ? ? ? ? this.toolStripButton1.Name = "toolStripButton1"; ?
? ? ? ? ? ? this.toolStripButton1.Size = new System.Drawing.Size(23, 22); ?
? ? ? ? ? ? this.toolStripButton1.Text = "toolStripButton1"; ?
? ? ? ? ? ? // ??
? ? ? ? ? ? // Form1 ?
? ? ? ? ? ? // ??
? ? ? ? ? ? this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); ?
? ? ? ? ? ? this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; ?
? ? ? ? ? ? this.ClientSize = new System.Drawing.Size(676, 552); ?
? ? ? ? ? ? this.Controls.Add(this.toolStrip1); ?
? ? ? ? ? ? this.Controls.Add(this.splitContainer1); ?
? ? ? ? ? ? this.Controls.Add(this.menuStrip1); ?
? ? ? ? ? ? this.MainMenuStrip = this.menuStrip1; ?
? ? ? ? ? ? this.Name = "Form1"; ?
? ? ? ? ? ? this.Text = "Form1"; ?
? ? ? ? ? ? this.menuStrip1.ResumeLayout(false); ?
? ? ? ? ? ? this.menuStrip1.PerformLayout(); ?
? ? ? ? ? ? this.splitContainer1.Panel1.ResumeLayout(false); ?
? ? ? ? ? ? this.splitContainer1.Panel2.ResumeLayout(false); ?
? ? ? ? ? ? this.splitContainer1.ResumeLayout(false); ?
? ? ? ? ? ? ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); ?
? ? ? ? ? ? ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit(); ?
? ? ? ? ? ? this.toolStrip1.ResumeLayout(false); ?
? ? ? ? ? ? this.toolStrip1.PerformLayout(); ?
? ? ? ? ? ? this.ResumeLayout(false); ?
? ? ? ? ? ? this.PerformLayout(); ?
??
? ? ? ? } ?
?
? ? ? ? #endregion ?
??
? ? ? ? private System.Windows.Forms.MenuStrip menuStrip1; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 文件FToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 新建NToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 打開OToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripSeparator toolStripSeparator; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 保存SToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 另存為AToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 打印PToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 打印預(yù)覽VToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 退出XToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 編輯EToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 撤消UToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 重復(fù)RToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 剪切TToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 復(fù)制CToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 粘貼PToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 全選AToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 工具TToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 自定義CToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 選項OToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 幫助HToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 內(nèi)容CToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 索引IToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 搜索SToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; ?
? ? ? ? private System.Windows.Forms.ToolStripMenuItem 關(guān)于AToolStripMenuItem; ?
? ? ? ? private System.Windows.Forms.SplitContainer splitContainer1; ?
? ? ? ? private System.Windows.Forms.OpenFileDialog openFileDialog1; ?
? ? ? ? private System.Windows.Forms.DataGridView dataGridView1; ?
? ? ? ? private System.Windows.Forms.DataGridView dataGridView2; ?
? ? ? ? private System.Windows.Forms.ToolStrip toolStrip1; ?
? ? ? ? private System.Windows.Forms.ToolStripButton toolStripButton1; ? ?
? ? } ?
} ?
========

C# Parsing 類實現(xiàn)的 PDF 文件分析器

https://www.oschina.net/translate/pdf-file-analyzer-with-csharp-parsing-classes-vers


下載示例
下載源代碼


1. 介紹


這個項目讓你可以去讀取并解析一個PDF文件,并將其內(nèi)部結(jié)構(gòu)展示出來. PDF文件的格式標(biāo)準(zhǔn)文檔可以從Adobe那兒獲取到. 這個項目基于“PDF指南,第六版,Adobe便攜文檔格式1.7 2006年11月”. 它是一個恐怕有1310頁的大部頭. 本文提供了對這份文檔的簡潔概述. 與此相關(guān)的項目定義了用來讀取和解析PDF文件的C#類. 為了測試這些類,附帶的測試程序PdfFileAnalyzer讓你可以去讀取一個PDF文件,分析它并展示和保存結(jié)果. 程序?qū)DF文件分割成單獨每頁的描述,字體,圖片和其它對象. 有兩種類型的PDF文件不受此程序的支持: 加密文件和多代文件.


這個程序的1.1版本允許世界各地使用點符號作為小數(shù)分隔符的程序員來編譯和運行程序.


1.2版本則修復(fù)了一個有關(guān)使用跨多個引用流來讀取PDF文檔的問題. 1.2之前的版本對此場景只會以一個對象數(shù)字重復(fù)的錯誤而終止運行.


如果你對將PDF文件寫入器引入你的應(yīng)用程序,那就請讀一讀 "PDF 文件寫入程序 C# 類庫" 這篇文章吧.


PDF格式的文件,借助Adobe Acrobat軟件,可以在各種屏幕上顯示查看,使用各種打印機(jī)打印。但是,如果使用二進(jìn)制文件編輯器打開PDF文件,你會發(fā)現(xiàn)文件的大部分是不可讀的,有小部分是可讀的,如下:


1 0 obj
<</Lang(en-CA)/MarkInfo<</Marked true>>/Pages 2 0 R
/StructTreeRoot 10 0 R/Type/Catalog>>
endobj
2 0 obj
<</Count 1/Kids[4 0 R]/Type/Pages>>
endobj?
4 0 obj
<</Contents 5 0 R/Group <</CS/DeviceRGB /S/Transparency /Type/Group>>
/MediaBox[0 0 612 792] /Parent 2 0 R
/Resources <</Font <</F1 6 0 R /F2 8 0 R>>
/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>
/StructParents 0/Tabs/S/Type/Page>>
endobj
5 0 obj
<</Filter/FlateDecode/Length 2319>>
stream
. . .
endstream
endobj
看上去,該文件是由嵌套在“n 0 OBJ ”和“ endobj ”關(guān)鍵詞之間的對象組成的,術(shù)語PDF也就是間接對象的意思。 “obj”前面的數(shù)字是對象編號和第幾代對象標(biāo)識, 雙尖括號中的內(nèi)容表示數(shù)據(jù)字典對象,中括號中的內(nèi)容表示數(shù)組對象, 以斜杠/ 開始的內(nèi)容表示參數(shù)名稱 (例如: /Pages)。上例中的第一項 “1 0 obj” 表示文檔的目錄或者文檔的根對象。文檔目錄的字典對象 “/Pages 2 0 R”,指向定義頁碼樹對象的引用。按照這樣推算,編號為2的對象包含指向 “/Kids[4 0 R]”的頁面的引用,是一個頁面文檔。 編號為4的對象是唯一的一個頁面定義, 頁面大小為612*792點, 換句話說,也就是8.5” * 11” (1” 代表72 點)點。該頁面使用了兩種字體F1和F2,這兩種字體分別在編號為6和8的對象中定義。該頁面的內(nèi)容在編號為5的對象中描述,該對象中包含頁面繪圖的流信息,示例中的 “. . .”代表這部分流信息。如果使用二進(jìn)制文件編輯器打開PDF文件,會發(fā)現(xiàn)這部分流信息看起來是一長串不可讀的隨機(jī)數(shù),原因是那是壓縮數(shù)據(jù)。流數(shù)據(jù)采用Zlib方法壓縮,壓縮方式由字典對象“/Filter /FlateDecode”描述,被壓縮流的大小為2319字節(jié)。解壓這部分流信息,前面幾行內(nèi)容如下所示:


q
37.08 56.424 537.84 679.18 re
W* n
/P <</MCID 0>> BDC 0.753 g
36.6 465.43 537.96 24.84 re
f*
EMC ?/P <</MCID 1/Lang (x-none)>> BDC BT
/F1 18 Tf
1 0 0 1 39.6 718.8 Tm
0 g
0 G
[(GRA)29(NOTECH LI)-3(MIT)-4(ED)] TJ
ET
這是頁面描述語言的一個小例子。 示例中, “re” 代表矩形,“re” 前面的4個數(shù)字代表矩形的位置和大小,依次為:起點橫坐標(biāo)、起點縱坐標(biāo)、寬度、高度。


這個簡單的例子演示了PDF文件內(nèi)部實現(xiàn)的總體思路。從頁面層次結(jié)構(gòu)的根對象開始, 每一頁都定義了諸如字體、圖片、內(nèi)容流的資源,內(nèi)容流由操作符和繪制頁面所需要的參數(shù)構(gòu)成。PDF文件分析器會產(chǎn)生一個對象匯總文件,該文件包含非流對象的其他所有對象。每個數(shù)據(jù)流會被解碼并保存為一個單獨的文件, 頁面描述流保存為文本格式的文件, 圖片流保存為.jpg或.bmp格式的文件,字體流保存為.ttf格式的文件,其他二進(jìn)制流保存為.bin 格式的文件,文本流保存為.txt格式的文件。通過另一個解析過程,晦澀難懂的頁面描述會被轉(zhuǎn)換為偽C#代碼,如上例中的頁面描述被轉(zhuǎn)為:


SaveGraphicsState(); // q
Rectangle(37.08, 56.424, 537.84, 679.18); // re
ClippingPathEvenOddRule(); // W*
NoPaint(); // n
BeginMarkedContentPropList("/P", "<</MCID 0>>"); // BDC
GrayLevelForNonStroking(0.753); // g
Rectangle(36.6, 465.43, 537.96, 24.84); // re
FillEvenOddRule(); // f*
EndMarkedContent(); // EMC
BeginMarkedContentPropList("/P", "<</Lang(x-none)/MCID 1>>"); // BDC
BeginText(); // BT
SelectFontAndSize("/F1", 18); // Tf
TextMatrix(1, 0, 0, 1, 39.6, 718.8); // Tm
GrayLevelForNonStroking(0); // g
GrayLevelForStroking(0); // G
ShowTextWithGlyphPos("[(GRA)29(NOTECH LI)-3(MIT)-4(ED)]"); // TJ
EndTextObject(); // ET
文章接下來的部分將對PDF文件的結(jié)構(gòu)和解析過程進(jìn)行更為詳細(xì)的描述,接下來的章節(jié)包括:對象定義,文件結(jié)構(gòu),文件解析,文件讀取,以及使用PDF文件分析器編程。


3. 免責(zé)聲明


pdf 文件分析器能處理大量的文件,這是我在自己的系統(tǒng)上掃描眾多PDF文件的經(jīng)驗。不過,該程序不支持加密文件或者多個代文件(在對象不為零之前的第二個數(shù)字)。在PDF規(guī)格文件之中可用功能的數(shù)量是非常顯著的。這并不可能為一個單的個開發(fā)者系統(tǒng)地測試所有的功能。如果在整個文件分析期間該程序拋出一個異常,將顯示一條錯誤信息,該信息顯示源代碼模塊名和行號。


4.對象定義


PDF文件生成多個對象。在PDF文件分析器項目中每個PDF對象都有一個對應(yīng)的類。所有這些對象類都派生于PDFbase類。對象類定義源代碼是BasicObjects.cs.確卻地PDF對象定義在Adobe pdf文件 規(guī)格第三章之中是有用的


Boolean對象是靠PdfBoolean類來實現(xiàn)的. Boolean在PDF上的定義同C#上的是相同的.


Integer 對象是靠PdfInt類來實現(xiàn)的. PDF上的定義同C#上Int32的定義是相同的.


實數(shù)對象是靠PdfReal類來實現(xiàn)的. PDF上的定義同C#上的Single定義相同.


String 對象是靠PdfStr類來實現(xiàn)的. PDF上的定義同C#相比有所不同. String 是用字節(jié)構(gòu)造出來的,而不是字符. 它被包在圓括號()里面. PdfFileAnalyzer會把包含在圓括號中的C#字符串保存成PDF的字符串. PDF的字符串對于ASCII編碼非常有用.


十六進(jìn)制字符串獨享是靠PdfHex類來實現(xiàn)的. 它是由每字節(jié)兩個十六進(jìn)制數(shù)定義,并包在尖括號里面的字符串. PdfFileAnalyzer 將包含在尖括號中的C#字符串保存成PDF十六進(jìn)制字符串. 對于 PDF 讀取器,字符串和十六進(jìn)制字符串對象可用于同種目的. 字符串 (AB) 等同于<4142>. PDF 十六進(jìn)制字符串對于任意編碼的場景非常有用.


Name 對象是靠PdfName類來實現(xiàn)的. Name 對象是由打頭的正斜杠后面跟著一些字符組成的. 例如 /Width. Named 對象用作參數(shù)名稱. PdfFileAnalyzer 將正斜杠開頭的C#字符串保存成Name對象.


Null 對象是靠PdfNull類來實現(xiàn)的. PDF 對于null的定義基本上同C#中的是一樣的.


4.2. 復(fù)合的對象


Array 對象是靠 PdfArray 類來實現(xiàn)的. PDF 數(shù)組是一個封裝在一堆中括號中的對象的集合. 一個數(shù)組的對象可以是除了流之外的任何對象.PdfFileAnalyzer 將一個C#數(shù)組中的對象保存成PdfBase類


. 因為所有的對象都繼承自PdfBase,所有在這個數(shù)組中保存多種類型的對象沒有啥問題. 當(dāng)數(shù)組對象被轉(zhuǎn)換成一個字符串時(使用ToString()方法), 程序會在首位添加中括號. 數(shù)組可以是空的. 下面是一個有六個對象的數(shù)組示例: [120 9.56 true null (string) <414243>].


Dictionary 對象是靠PdfDict類實現(xiàn)的. PDF 字典是一組被包入一對雙尖括號中的鍵值對集合. Dictionary 的鍵是一個對象的名稱,而值則可以是除了流之外的任何對象. ?PdfFileAnalyzer 將一個鍵值對保存到PdfPair類中. 鍵是一個C#字符串,而值則是一個PdfBase.PdfDict 類有一個PdfPair類的數(shù)組. Dictionary 可以用鍵來訪問. 因而鍵值對的順序沒有啥意義. PdfFileAnalyzer 用鍵來對鍵值對進(jìn)行排序. 下面是一個有三個鍵值對的字典: <</CropBox [0 0 612 792] /Rotate 0 /Type /Page>>.


Stream 對象是靠PdfStream來實現(xiàn)的. Streams 被用來處理面熟語言,圖形和字體. PDF Stream 由一個字典和一個字節(jié)流組成. 字典中定義了流的參數(shù). 比如流對象中字典的一個鍵值對 /Filter. PDF 文檔定義了10種類型的過濾器. PdfFileAnalyzer 支持了4種. 這是我發(fā)現(xiàn)在實際場景中只會被用到那4種. 壓縮過濾器 FlateDecode 是現(xiàn)在的PDF寫入器最長被用到的過濾器. FlateDecode支持ZLib解壓縮. LZWDecode 壓縮過濾器在過去些年用的比較多. 為了能讀取比較老的PDF文件, 我們的程序支持這個過濾器. ASCII85Decode 過濾器將可被打印的ASCII轉(zhuǎn)換成二進(jìn)制位. DCTDecode 用于JPEG圖像的壓縮.PdfFileAnalyzer 為前三種實現(xiàn)了解壓縮. DCTDecode 流則以文件擴(kuò)展名.jpg保存. 它是一個可以被展示的圖片文件.


Object 流在PDF 1.5中被引入. 它是一個包含多個間接對象(在下面會描述道)的流. 上面描述的Stream 對象一次只壓縮一個流. Object 流會將所有包含進(jìn)來的流壓縮到一個壓縮域中.


多引用流在PDF 1.5中被引入. 它是一個包含多引用表格的流,下文會描述到.


內(nèi)聯(lián)圖片對象是靠 PdfInlineImage來實現(xiàn)的. 它是一個帶有一個流的流. 內(nèi)聯(lián)圖片是頁面描述語言的一部分. 它由BI-開頭圖形, ID-圖形數(shù)據(jù)和EI-結(jié)尾圖形這三個操作符組成. BI 和 ID 之間的區(qū)域是一個圖形字典,而ID 和 EI 之間的區(qū)域則包含圖形數(shù)據(jù).


4.3. 間接對象


間接對象是靠 PdfIndirectObject實現(xiàn)的. 它是一個PDF文檔的主要構(gòu)造塊. 間接對象是任何被包在 “n 0 obj” 和 “endobj”之間的對象. 其它對象可以通過設(shè)定“n 0 R”來引用間接對象. “n”代表對象編號. “0”代表生成編號. 這個程序不支持0之外的生成編號. PDF 規(guī)范允許其它的編號. 多代生成的理念允許PDF的修改操作是在保留原有文件的基礎(chǔ)上追加變更.


對象引用時一種引用間接對象的方法. 例如 /Pages 2 0 R 是目錄對象中的字典里的一項. 它是一個指向 /Pages 對象的指針. pages對象是編號為2的間接對象.


4.4. 操作符和關(guān)鍵詞


操作符和關(guān)鍵詞不被認(rèn)為是PDF對象. 而PdfFileAnalyzer 程序有一個PdfOp 和一個PdfKeyword 類可以從中得到 PdfBase 的類. 在轉(zhuǎn)換過程中,轉(zhuǎn)換器為每一個可用的字符序列創(chuàng)建了一個 PdfOp 或者PdfKeyword . Pdf文件規(guī)范的附錄A-操作符總結(jié)中列出了所有的操作符. 列表中有73個操作符. 下面是一些操作符的示例: BT-打頭的文本對象, G-用于做記號的設(shè)置灰度操作, m-移動到, re-矩形和Tc-設(shè)置字符間距. 下面是關(guān)鍵詞的示例: stream, obj, endobj, xref.


5. 文件結(jié)構(gòu)


PDF文件由四個部分構(gòu)成: 頭部Header , 主體body, 多引用cross-reference 和附帶簽名 trailer signature.


Header: 頭部是文件的簽名. 它必須是 %PDF-1.x , x 從 0 到 7.


Body: 主體區(qū)域包含所有的間接對象.


Cross-reference: 多引用是一個指向所有間接對象的文件位置指針列表. 有兩種類型的多引用表格. 原始的類型有ASCII字符組成. 新式的是一個包含一個間接對象的流. 信息以二進(jìn)制數(shù)字編碼. 在多引用表格的結(jié)束部分有一個附件字典. 一個文件可以有超過一個的多引用區(qū)域.


Trailer signature: 附帶簽名由關(guān)鍵詞“startxref”, 最后一個多引用表格的偏移位, 和結(jié)束簽名 %%EOF 組成. 請注意: 附帶簽名是多引用區(qū)域的一部分.


6. 文件轉(zhuǎn)換


PDF 文件是一個字節(jié)的序列. 一些字節(jié)有特殊的意義.


空格被定義成: null, tab, 換行, 換頁, 回車和間隔.


分隔符被定義成: (, ), <, >, [, ], {, }, /, %, 以及空格字符.


文件轉(zhuǎn)換是由PdfParser 類來完成的. 開始進(jìn)行轉(zhuǎn)換過程是,程序會設(shè)置文件需要被轉(zhuǎn)換區(qū)域的位置. ParseNextItem() 是提取下一個對象的方法.


解析器跳過空格符和注釋。如果下一個字節(jié)是“(”,判斷對象為一個字符串。如果下一個字節(jié)是“[”,判斷對象是一個數(shù)組。如果接下來的兩個字節(jié)是“<<”,判斷對象是一個字典。如果下一個字節(jié)是“<”,判斷對象是一個十六進(jìn)制字符串。如果下一個字節(jié)是“/”,判斷對象是一個名稱。如果下一個字節(jié)不是上述任何一種,解析器會采集隨后的字節(jié)直到發(fā)現(xiàn)定界符。定界符不是當(dāng)前標(biāo)記符的一部分。標(biāo)記符可以是整數(shù),實數(shù),操作符或關(guān)鍵詞。在整數(shù)的情況下,程序?qū)⑦M(jìn)一步搜索對象引用“n 0 R”或間接對象“n 0 obj”中 n 為該整數(shù)的對象。從 ParseNextItem() 返回的值是第4節(jié)“對象的定義”中所述的適當(dāng)對象。對象的類作為 PdfBase 類返回。


在數(shù)組或字典的情況下,程序?qū)?zhí)行遞歸調(diào)用 ParseNextItem() 來解析數(shù)組或字典的內(nèi)部對象。


7. 文件讀取


PdfDocument 類是 PDF 文件分析的主要類。入口方法是 ReadPdfFile(String FileName)。程序以二進(jìn)制讀取的方式打開 PDF 文件(一次一個字節(jié))。


文件分析開始于檢查頭部簽名 %PDF-1.x(x為0到7)和結(jié)尾簽名%%EOF。有人會認(rèn)為,所有的 PDF 生成器會把頭部簽名放在文件的零位置,結(jié)尾簽名放在文件的最后。不幸的是,實際并非如此。程序必須在文件的兩端搜索這兩個簽名。如果頭部簽名不在零位置,所有間接對象的文件位置的指針也必須調(diào)整。


就在結(jié)尾簽名的前面有一個指向最后一個交叉引用表開始位置的指針。
========

Windows下的開源二進(jìn)制文件編輯器HexEdit

http://blog.okbase.net/haobao/archive/65.html
?
作者:Andrew Phillips
?
[譯者按]HexEdit是一個偉大的軟件,多少年來一直未伴隨著我們,如今作者釋放出全部源代碼,真的讓我們感激萬分。本文摘錄翻譯了部分,原文請參見http://www.codeproject.com/Articles/135474/HexEdit-Window-Binary-File-Editor
??
介紹
我在去年公測后發(fā)布了hexedit 4.0正式版。測試版工作得很好,所以我并沒有急于釋放正式版,有些小BUG需要修復(fù)。
?
HexEdit用C++編寫,需要VS2008(帶功能包)、VS2012或后續(xù)版本和MFC的支持。你很容易編譯生成它,如果有問題請參閱“生成HexEdit 4.0”章節(jié),現(xiàn)在也有一個工程文件是針對VS2012的。
?
HexEdit(1999年)的第一個版本是開源的,但后來的版本是共享軟件(雖然我一直堅持在做一個免費的版本)。hexedit的2.0開放源代碼,因為它使用了一些BCG商業(yè)庫。(BCG庫是一個很好的MFC擴(kuò)展庫,所以我不后悔使用它。)幸運的是,幾年前,微軟買了BCG代碼,并把它納入MFC。所以,現(xiàn)在hexedit的4.0是第一次開源(見 http://www.hexedit.com);也有一個共享軟件版本,可用于那些想為它支付的朋友(見 http://www.hexeditpro.com),增加了一些小功能。
?
要生成hexedit 4.0中,您只需要Visual Studio,加上一些開放的源代碼和庫(其中大部分來自CodeProject)。您可以使用程序或任何的源代碼,不管出于什么目的,你認(rèn)為合適的,只要你遵守的相關(guān)許可要求(見下文)或任何包含第三方代碼的具體要求。
?
開發(fā)歷史
?
我在1997-1998寫的HexEdit,當(dāng)時工作中需要用到,而那時正缺少十六進(jìn)制編輯器。
hexedit被設(shè)計為易于使用和用戶熟悉的Windows軟件,就像MS Word和Visual Studio。事實上,它借鑒了一些常見的Windows程序的很多思路。
?
代碼文件
HexEdit.h - CHexEditApp 類是應(yīng)用程序類。
Stdafx.h - 預(yù)編譯頭文件
resource.h - 資源 IDs,用于 HexEdit.rc 和C++代碼
?
MainFrm.h - 主程序窗口MFC類
ChildFrm.h - 處理每個文件的窗口類
HexEditDoc.h - CHexEditDoc 類 (參閱 HexEditDoc.cpp, DocData.cpp, Template.cpp, BGSearch.cpp, BGAerial.cpp).
HexEditView.h - CHexEditView 類(參閱 HexEditView.cpp 和 Printer.cpp)
ScrView.h - CScrView 提供了可滾屏的視圖 (CHexEditView的基類)
DataFormatView.h - CDataFormatView 處理模板顯示 (參閱 Template.cpp)
AerialView.h - CAerialView class - 顯示 aerial 視圖 (參閱 BGAerial.cpp)
?
Prop.h - 屬性對話框類 (property sheet, property pages and controls)
BookMarkDlg.h - CBookMarkDlg 對話框用于顯示、添加書簽(參見bookmark.h)?
FindDlg.h - 查找對話框?qū)?yīng)類 (property sheet and pages)?
Explorer.h - HexEdit 瀏覽對話框 (dialog and control classes)?
CalcDlg.h - CCalcDlg 計算器對話框類 (see also CalcEdit.h below)
?
Options.h - 選項對話框的屬性頁
DFFD*.h - 模板編輯對話框?
TParseDlg.h - 模板編輯時使用的C/C++分析對話框 (參見TParse.h)
NewFile.h - “新文件”和“插入塊”對話框
OpenSpecialDlg.h - 磁盤編輯打開特殊對話框 (參見SpecialList.h)?
RecentFileDlg.h - 顯示最近使用的文件對話框 (參見HexFileList.h)?
CopyCSrc.h - CCopyCSrc對話框,用于 "Copy As C Source"?
Algorithm.h - CAlgorithm 類用于加密算法對話框
Password.h - CPassword 類用于密碼加密對話框
CompressDlg.h - zlib壓縮對話框
EmailDlg.h - 郵件對話框
Tipdlg.h - 顯示每日技巧
Dialog.h - 在宏中使用的對話框 (GetStr CMacroMessage CSaveMessage CMultiplay
- 還有CFileDialog 派生類,包括 CHexFileDialog)
HexPrintDialog.h - 自定義打印對話框 (重載 MFC CPrintDialog?
SaveDffd.h - 模板沒有保存時的提示對話框 (save/save as/cancel)?
NewScheme.h - small dialog used when creating a new color scheme?
BookmarkFind.h - used by Find dialog when bookmarking found occurrences?
DirDialog.h - directory selection dialog (see below)
?
Splasher.h - CSplashWnd for splash screen (see below)?
TipWnd.h - CWnd derived class to show a small "tip" window (see below)?
TransparentListBox.h, TransparentStatic2.h - transparent controls (see below)?
CCalcEdit.h - CCalcEdit class which handles calculator edit box?
control.h - various text and combo controls used in dialogs and on toolbars
?
GenDockablePane.h - dockable window used to makes Calculator, Find dialog etc dockable?
ResizeCtrl.h - CResizeCtrl (see below)?
BCGMisc.h - a few classes derived from BCG (now MFC) classes?
UserTool.h - CHexEditUserTool is derived from CUserToolto allow command line substition for user tools?
SimpleSplitter.h - CSimpleSplitter is used in Explorer dialog for the split between folder/file sections?
HexEditSplitter.h - CHexEditSplitter allows showing aerial/template views in a split window?
TabView.h - CHexTabView (derived from CTabView allows showing aerial/template views in tabs?
CoordAp.h - CPointAp CSizeAp CRectAp (see below) for 64-bit (vertically) coordinate system
?
TParser.h - 用于TParseDlg的C/C++代碼分析器 (參閱下面的TParseDlg.h)?
HexEditMacro.h - handles recording and playback of Keystroke macros?
HexFileList.h - stores global list of all recent files?
SpecialList.h - stores info about that volumes and raw disks in the system?
Bookmark.h - CBookmarkList class for global storage for bookmarks?
Scheme.h - CScheme stores all color schemes?
NavManager.h - global storage of navigation points?
SystemSound.h - CSystemSound contains static method for getting, setting, playing sounds (see below)?
Timer.h - timer class can time events (see below)
?
UpdateChecker.h - 通過Internet檢測HexEdit的最新版本
Xmltree.h - 封裝了MS XML SDK
BigInter.h - BigInteger 類用于處理大于64位的數(shù)字
CFile64.h - CFile64 類用于64位文件處理?
crypto.h - CCrypto 類封裝了 Crypto API
Boyer.h - boyer類用于搜索
range_set.h - template class for set with ranges (see below)?
Expr.h - expr_eval class handles C-like expressions (used in templates etc)?
IntelHex.h - CReadIntelHexand CWriteIntelHex (see below)?
SRecord.h - CReadSRecordand CWriteSRecord (see below)
?
misc.h - 雜項全局函數(shù)
md5.h - routines for generating an MD5 checksum
ntapi.h - declarations for direct access to NT API (bypassing Windows) for disk editor?
w2k_def.h - more NT (not 9X) info - included by ntapi.h?
optypes.h - defines unary and binary operations (for Calculator and Operations menu)
SVNRevisionTemplate.h - used by SVN uitlity to create SVNRevision.hSVNRevision.h - just stores?
?
相關(guān)內(nèi)容
下載源代碼:http://www.okbase.net/file/item/19711
更多內(nèi)容請參見http://www.codeproject.com/Articles/135474/HexEdit-Window-Binary-File-Editor
========

總結(jié)

以上是生活随笔為你收集整理的C#二进制文件编程实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

成人久久| 国产又粗又猛又色又黄视频 | 精品久久久免费视频 | 精品字幕在线 | 激情综合五月天 | 一区电影| 欧美大片大全 | 日韩精品免费在线观看 | 亚洲欧美国产精品va在线观看 | 99久久精品久久久久久清纯 | 超级碰碰碰碰 | 日韩理论在线视频 | 久久大片网站 | 一区二区三区高清在线观看 | 99热在线精品观看 | 国产精品99久久免费黑人 | 99成人精品 | 国产麻豆精品在线观看 | 欧美精品久久久久a | 国产破处视频在线播放 | 国产美女永久免费 | 欧美一级特黄aaaaaa大片在线观看 | 欧美日韩性视频在线 | 亚洲午夜久久久久 | 欧美一区二区在线免费看 | 夜夜高潮夜夜爽国产伦精品 | 免费看黄的视频 | 99久久精品电影 | 亚洲精品一区二区久 | 在线观看视频国产一区 | 日韩城人在线 | 91免费黄视频 | 久久久久久久久久电影 | 国精产品一二三线999 | 亚洲综合激情五月 | 国内精品小视频 | 成人动态视频 | 视频三区在线 | 奇米影视在线99精品 | 99精品视频在线免费观看 | 免费在线观看国产黄 | 日韩精品视频免费 | 亚洲精品福利在线 | 91最新在线观看 | 日本女人逼 | 91人人爽久久涩噜噜噜 | 激情久久伊人 | 成年人免费在线播放 | 亚洲国产欧美在线人成大黄瓜 | 国产黄色片一级 | 国产精品视频999 | 欧美激情精品久久久久久免费 | 麻豆一区在线观看 | 国产精品久久久久久久久久久久午夜 | 国产成人精品一区一区一区 | 日韩欧美成 | 成人免费 在线播放 | 国产成人性色生活片 | 夜夜摸夜夜爽 | 日本久久久亚洲精品 | 日本精品久久久久 | 在线视频日韩 | 在线а√天堂中文官网 | 91tv国产成人福利 | 亚洲国产精品视频 | 久久免费看 | 国产偷国产偷亚洲清高 | 国产精品福利无圣光在线一区 | 国产福利在线不卡 | 欧美网址在线观看 | 免费成人黄色片 | 欧美视频在线观看免费网址 | 美女免费网站 | 天天干夜夜爽 | 日韩高清成人 | 亚洲久草视频 | 欧美日韩精品在线 | 免费av在线播放 | 久久图 | caobi视频 | 我要色综合天天 | 亚洲欧美视频一区二区三区 | av中文字幕在线播放 | 少妇视频一区 | a资源在线| 91福利视频网站 | 久久久久久久久电影 | 99视频在线看 | 丁香六月综合网 | 91精品一区二区三区蜜桃 | 三级黄色在线观看 | 日产av在线播放 | 国产精品福利在线播放 | 999超碰 | 欧美日韩精品免费观看 | a在线视频v视频 | 999精品| 久久久麻豆精品一区二区 | 日本性视频 | 国产一区在线看 | 在线观看免费日韩 | 日本中文字幕网 | 免费国产在线精品 | 狠狠综合久久av | 亚洲精品乱码久久久久久高潮 | 欧美做受高潮 | 丁香久久综合 | 国产色视频一区 | 色婷婷电影 | 久久精品99国产精品 | 91精品黄色 | 在线视频日韩一区 | 人人爱人人添 | 亚洲国产中文在线观看 | 国产小视频在线观看免费 | 日日夜夜综合网 | 99久久久久免费精品国产 | 欧美日韩高清一区二区三区 | 高清国产午夜精品久久久久久 | 国产精品成人久久久久 | 最近中文国产在线视频 | 成人av电影免费在线播放 | 色播六月天| 国产精品女同一区二区三区久久夜 | 天天草天天 | 国产综合香蕉五月婷在线 | 亚洲aⅴ乱码精品成人区 | 狠狠插天天干 | 日本丶国产丶欧美色综合 | 日日夜夜天天射 | 亚洲黄色在线观看 | 欧美激情精品 | 97精品国产一二三产区 | 91久久久久久国产精品 | 九色在线 | 国产精品日韩高清 | 九九亚洲精品 | 国产精品久久久久久69 | 黄色精品一区 | 最新一区二区三区 | 国产 成人 久久 | 日韩在线视频免费观看 | 国产精品精品久久久 | 国产亚洲精品女人久久久久久 | 99热99热 | 在线亚洲高清视频 | 国产精品久久久久久麻豆一区 | 日女人电影 | 一区二区日韩av | 又黄又网站| 国产a级精品 | 久久99亚洲网美利坚合众国 | 久久ww| 日日日网| 久久爱资源网 | 国产精品第一视频 | 在线观看视频色 | 亚州av成人 | 99精品国产兔费观看久久99 | 免费观看91| 国产在线精品福利 | 91探花视频 | 国产手机精品视频 | 精品96久久久久久中文字幕无 | 99久久99久久精品国产片 | 欧美激情综合色综合啪啪五月 | 99午夜| 久久国产高清视频 | 国产在线更新 | 精品视频免费在线 | 国产亚洲精品成人av久久影院 | 色www免费视频 | 欧美一级片免费在线观看 | 麻豆视频在线观看免费 | 亚洲精品mv在线观看 | 欧美日韩免费在线视频 | 久久99精品久久久久久清纯直播 | 999在线观看视频 | 91精品看片 | 国产精彩视频一区 | 在线观看亚洲成人 | 99久久精品久久亚洲精品 | 国际av在线| 18网站在线观看 | 久久第四色 | 在线蜜桃视频 | 在线观看黄色av | 久久色网站 | 超级碰碰免费视频 | 亚洲国产三级在线观看 | 久久8| 中文字幕在线观看日本 | 日韩精品免费专区 | 最近更新好看的中文字幕 | av一区二区三区在线 | 中文 一区二区 | 色婷婷88av视频一二三区 | 香蕉视频免费在线播放 | 最近高清中文在线字幕在线观看 | 久久免费在线观看视频 | 亚洲国产丝袜在线观看 | 国产日韩精品一区二区三区在线 | 亚洲精品午夜久久久久久久久久久 | 热久久最新地址 | ww亚洲ww亚在线观看 | 不卡电影一区二区三区 | 又爽又黄又无遮挡网站动态图 | 精品国产乱码一区二区三区在线 | 日日麻批40分钟视频免费观看 | 国产在线视频不卡 | 久久免费在线观看视频 | 日韩在线免费电影 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产高清在线看 | 五月激情电影 | 日韩成人在线一区二区 | 在线免费黄| 欧美日韩高清在线观看 | 97超级碰| www免费在线观看 | 日韩女同一区二区三区在线观看 | 探花视频在线观看免费版 | 亚洲五月综合 | 国产精品99久久久久久有的能看 | 日韩在线观看小视频 | 色在线视频 | 久久精品久久久久电影 | 特级aaa毛片 | 波多野结衣久久精品 | 国产网红在线 | 又色又爽的网站 | 美女视频黄免费网站 | 九草在线视频 | 日韩欧美在线免费 | 天天躁日日躁狠狠躁av麻豆 | 国产亚洲精品久久久久久久久久 | 成人av片免费观看app下载 | 国产成人精品一区二区三区在线 | 肉色欧美久久久久久久免费看 | 日本中文字幕电影在线免费观看 | 日本视频高清 | 色999在线 | 91麻豆精品国产91久久久更新时间 | 国产精品扒开做爽爽的视频 | 日韩黄色在线观看 | 国产精品久久久久免费 | 国产91区| 日韩在线激情 | 国产区久久 | 国内99视频 | 一区二区三区四区精品视频 | 国产精品1区2区在线观看 | 亚洲精品小视频 | 久久精品一区二区三区中文字幕 | 夜色资源站国产www在线视频 | 亚洲成年人在线播放 | 97av视频在线观看 | 国产欧美日韩一区 | 97超碰超碰| 亚洲理论片在线观看 | 久久综合久久鬼 | www.久久色| 天天干夜夜夜操天 | 中文字幕av网站 | 97国产精品 | 久久久久久久久久久免费av | 免费在线国产黄色 | 日日操操操| 久久精品久久久久久久 | 国产人成一区二区三区影院 | 欧美精彩视频在线观看 | 99c视频在线 | 久久情侣偷拍 | 精品在线一区二区三区 | 国产无套一区二区三区久久 | 国产精品美女免费 | 国产精品2018 | 久久激情视频网 | 国产原创中文在线 | 亚洲性xxxx | 成人久久18免费网站麻豆 | 国产91勾搭技师精品 | 久久久av电影 | 日日草av | 国产精品久久久久久久久费观看 | www.国产精品 | 久久一久久 | 欧美一级xxxx | 日韩有码在线播放 | 911av视频| 日韩视频一区二区在线 | 久久精品99久久久久久2456 | 亚洲精品一区二区18漫画 | 欧美性猛片,| 亚洲精品18p | 日韩欧美69| 成片免费观看视频999 | 中文字幕欧美激情 | 国产九色视频在线观看 | 中文在线www| 婷婷久久综合网 | 美女视频网站久久 | 日韩中文字幕亚洲一区二区va在线 | 婷婷综合| 天天操狠狠操夜夜操 | 亚洲人成网站精品片在线观看 | 亚洲日韩精品欧美一区二区 | 三级在线视频播放 | 欧美福利视频一区 | 国产精品精品国产 | 国产一区二区影院 | 国产一区二区三区免费视频 | 国产成人久久 | 手机成人在线电影 | 欧美动漫一区二区三区 | 欧洲一区二区在线观看 | 五月婷婷在线视频观看 | 久久国内精品视频 | 国产日韩三级 | 久久久999免费视频 日韩网站在线 | 婷婷精品国产一区二区三区日韩 | 成年人视频免费在线 | 在线电影日韩 | 国产一级电影 | 涩涩成人在线 | 国产盗摄精品一区二区 | 亚洲一区二区高潮无套美女 | 美女在线免费视频 | 成人影视免费 | 蜜臀久久99精品久久久酒店新书 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产精品不卡在线 | 丁香五月缴情综合网 | 男女激情麻豆 | 黄色av影视 | 久久99精品久久久久久秒播蜜臀 | av免费高清观看 | 欧美在线一级片 | 麻豆免费精品视频 | 日日天天av | 精品国产乱码久久 | 日本中文一区二区 | 国内精品久久久久久久久久 | 亚洲男男gaygayxxxgv | 色老板在线 | 天天操操操操操 | 国产精品久久久久久久久久久久午夜片 | 免费看一级 | 91人人人 | 久久久人人爽 | 这里只有精品视频在线观看 | 91亚洲精品久久久中文字幕 | 欧美日本在线视频 | 成人午夜剧场在线观看 | 日本久久免费视频 | 99久久精品国产亚洲 | 日本一区二区免费在线观看 | 中文字幕亚洲国产 | 色五月成人 | 激情网站| 黄色一级免费电影 | 99re亚洲国产精品 | 久久久久一区二区三区 | 在线播放 日韩专区 | 日本女人b | 成人一级片在线观看 | 99精品免费久久久久久久久 | 国产一卡久久电影永久 | 91久久精品一区 | 久久久香蕉视频 | 成人av免费在线播放 | 婷婷精品在线视频 | 成人一级 | 在线天堂8√ | 人人射人人射 | 日韩精品一区电影 | 国产精品99久久久久 | 中国美女一级看片 | 17videosex性欧美 | 久久人人精品 | 在线播放 亚洲 | 99久久精品国产毛片 | 国产又粗又猛又黄又爽的视频 | 午夜私人影院 | 国产裸体永久免费视频网站 | 在线观看国产亚洲 | 国产一性一爱一乱一交 | 久保带人 | 精品久久久久久亚洲 | 亚一亚二国产专区 | 夜夜摸夜夜爽 | 国产麻豆视频 | 亚洲一区网 | 在线免费成人 | 日韩av伦理片 | 亚洲精品无 | 亚洲一区欧美激情 | 欧美一级片播放 | 亚洲精品美女在线观看播放 | 久草在线免费看视频 | 成人国产精品久久久春色 | 超碰97人人干 | 国产精品成人久久 | 在线a人片免费观看视频 | 91亚色视频| 美女精品国产 | 国产色网站 | 成人欧美在线 | 久久亚洲精品国产亚洲老地址 | 久久综合婷婷综合 | av福利免费 | 欧美不卡在线 | 99精品欧美一区二区三区黑人哦 | 精品免费观看 | 中文字幕在线观看视频一区二区三区 | 一级久久精品 | 日韩三级精品 | 日本黄色免费在线 | 成人禁用看黄a在线 | 国产精品原创视频 | 天天激情 | 日日精品 | 国产高清黄色 | www四虎影院 | 人人澡超碰碰97碰碰碰软件 | 欧美日韩中文国产一区发布 | 欧美激情奇米色 | 国产成人av电影在线 | 欧美五月婷婷 | 亚洲国产精品一区二区尤物区 | 天天曰天天 | 91在线国产观看 | 在线看片一区 | 2020天天干夜夜爽 | 亚洲日韩欧美一区二区在线 | 中文字幕在线影院 | 亚洲国产精品500在线观看 | 久久国产精品久久精品国产演员表 | 国产涩涩在线观看 | 国产精品一区二区果冻传媒 | 中文字幕免费一区 | 欧美福利网站 | 国产亚洲视频在线 | 色婷婷亚洲 | 四虎成人免费观看 | 亚洲一级免费电影 | 亚洲一区二区三区四区在线视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲综合视频在线播放 | 日韩欧美69 | 日韩中文字幕在线观看 | 久久久久久福利 | 国产在线观看91 | 成人午夜电影久久影院 | 91av在线免费播放 | 五月天婷婷视频 | 日韩特级片 | 中文字幕文字幕一区二区 | 久久精品牌麻豆国产大山 | 黄色国产精品 | 国产在线精品一区二区不卡了 | 亚洲国产精品久久久久婷婷884 | 亚洲精品久久久久中文字幕m男 | 中文字幕亚洲精品日韩 | 人人插人人爱 | 9草在线 | 日韩中文免费视频 | 国产精品久久久久久久久婷婷 | 色免费在线 | 久久曰视频 | 99热免费在线 | 久久国产手机看片 | 69久久久久久久 | av不卡在线看 | 国产资源在线视频 | 久久综合狠狠综合久久综合88 | 中文永久免费观看 | 91精品对白一区国产伦 | 9999国产精品 | 激情影院在线 | 最新av在线免费观看 | 中文字幕在线观看播放 | 久草精品视频在线播放 | 午夜精品电影一区二区在线 | 成人h动漫精品一区二 | 日韩av视屏| 中文字幕乱在线伦视频中文字幕乱码在线 | 五月婷婷综合网 | 国产直播av | 久久成电影 | 成人av片在线观看 | 丝袜+亚洲+另类+欧美+变态 | 国产一级在线视频 | www.黄色在线 | 亚洲一级片| 五月开心六月伊人色婷婷 | 欧美成年网站 | 精品一区二区在线免费观看 | 亚洲国产精品成人av | 日本丰满少妇免费一区 | 手机av片 | 在线观看av黄色 | 欧美国产日韩在线视频 | 人人爽人人av | 九九在线精品视频 | 久久久久久国产一区二区三区 | 日韩在线一二三区 | 一本一本久久a久久 | 99精品一级欧美片免费播放 | 一区二区三区免费在线 | 色搞搞 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 欧美一区成人 | 久久精品人人做人人综合老师 | 久久久久久国产精品 | 美女中文字幕 | www.啪啪.com | 成人在线黄色 | 亚洲欧美视频在线 | 欧美日韩免费一区二区 | 成人久久电影 | 欧美精品视 | 国产免费嫩草影院 | 激情久久久久久久久久久久久久久久 | 免费碰碰 | 五月婷婷,六月丁香 | 在线观看免费成人av | 国产精品一区免费在线观看 | 91看片在线播放 | 成人黄色小说在线观看 | 依人成人综合网 | 欧美激情精品久久久久久免费 | 最近2019中文免费高清视频观看www99 | 麻豆免费看片 | 99热精品久久 | 天天插综合 | 日韩视频免费 | 涩涩色亚洲一区 | av成人黄色 | 国产成人三级一区二区在线观看一 | 日韩伦理片hd | 国产精久久久久久妇女av | 国产成人精品区 | 亚洲国产网站 | 国产视频一区在线免费观看 | 精品久久久久久久久久久久久久久久久久 | www.五月婷| 国产一区二区免费 | 91精选 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产精品11 | 免费试看一区 | 偷拍精偷拍精品欧洲亚洲网站 | 91精品国产一区二区三区 | 福利电影久久 | 国模精品在线 | 免费看色网站 | 久久久久久久久久久精 | 久久精品中文字幕少妇 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲三级在线播放 | 日本精品xxxx | 99久久夜色精品国产亚洲96 | 亚洲91av | 五月天久久婷 | 日批视频在线 | 欧美在线一级片 | 成年人黄色免费视频 | 久久欧洲视频 | 在线观看你懂的网址 | 日韩激情在线视频 | 午夜视频导航 | 一本一本久久aa综合精品 | 色婷婷亚洲婷婷 | 日日干天夜夜 | 亚洲精品在线观看网站 | 香蕉在线影院 | 国产xvideos免费视频播放 | 狠狠色丁香婷婷综合橹88 | 久久免费看a级毛毛片 | 日韩在线电影观看 | 日韩欧美在线国产 | 亚洲免费av在线播放 | 国产精品毛片一区视频播 | 奇米网网址 | 又爽又黄在线观看 | 久久人人爽人人爽人人片av软件 | 激情五月综合 | 亚洲国产精品久久久 | 99在线看 | 亚洲精品视频在线观看免费视频 | 女人高潮一级片 | 婷婷成人综合 | 日韩av成人在线观看 | 在线观看亚洲精品 | 182午夜在线观看 | 免费能看的黄色片 | 看av免费网站 | 波多野结衣在线观看一区 | 国产精品99久久免费黑人 | 国产在线精品视频 | 开心激情综合网 | 国产中文字幕在线视频 | 一级淫片a| 四虎影视国产精品免费久久 | 91成人免费看 | av在线免费观看黄 | 亚洲永久精品国产 | 激情五月婷婷丁香 | 91人人澡人人爽人人精品 | 在线观看黄色小视频 | 欧美一区二区三区激情视频 | 91看片在线 | 美女视频久久久 | 国产一级视频在线观看 | 4p变态网欧美系列 | 久久综合中文色婷婷 | 亚洲国产成人av网 | 日日夜夜精品视频天天综合网 | 国产一二三在线视频 | 欧美天天综合 | 国产在线视频导航 | 99国产一区二区三精品乱码 | av三级av | 亚洲精品国产拍在线 | 亚洲精品玖玖玖av在线看 | 亚洲成av人片一区二区梦乃 | 国产精品一区二区电影 | 中文字幕在线视频一区二区 | 亚洲专区在线视频 | 日韩精品影视 | 中文免费在线观看 | 国产成人精品av | 在线免费观看黄色av | 国产精品理论片在线播放 | 亚洲午夜久久久久久久久 | 欧美成人精品xxx | 日本少妇高清做爰视频 | 综合婷婷丁香 | 免费网站黄 | 日韩另类在线 | 狠狠色噜噜狠狠狠狠2021天天 | 99视频免费 | 激情在线网 | 色婷婷福利视频 | 91香蕉视频在线下载 | 午夜精品久久久99热福利 | 久久y| 欧美 日韩 视频 | 国产麻豆精品传媒av国产下载 | 国产黄色一级片在线 | 久久精品99国产精品亚洲最刺激 | 色婷在线 | 国产免费久久久久 | www.久久色.com | 99精品视频免费 | 97天堂 | 国产精品九九九九九 | 亚洲日本成人网 | 免费看的黄色的网站 | 香蕉视频色 | 国产精品久久久久婷婷二区次 | 久久久蜜桃一区二区 | av电影免费在线看 | 中文字幕在线视频精品 | 亚洲专区在线播放 | 99色视频在线 | 欧美激情综合五月 | 欧美日韩国产高清视频 | 亚洲一区免费在线 | 中文字幕日韩国产 | 国产91电影在线观看 | 丝袜美腿亚洲 | 日韩欧美精品一区 | 99精品欧美一区二区三区黑人哦 | 欧美人牲 | 亚洲成人av免费 | 亚洲精品视频在线观看免费视频 | 国产精品人成电影在线观看 | 日韩精品中文字幕在线观看 | 免费看黄在线网站 | 在线亚洲精品 | 久草在线官网 | 日日夜夜狠狠操 | 黄污视频网站大全 | 欧美日韩中文国产一区发布 | 91精品在线视频观看 | 操久久免费视频 | 亚洲高清视频在线观看免费 | 成人黄色影片在线 | 成人在线免费观看网站 | 激情五月亚洲 | 在线日韩中文 | 99精品免费在线观看 | 天天草天天| 亚洲天天摸日日摸天天欢 | 欧美aaa一级 | 911久久 | 久久久久久蜜av免费网站 | 国产无限资源在线观看 | 91尤物在线播放 | 色在线免费 | 国产成年人av | av中文字幕免费在线观看 | 久草99| 一区二区三区国产精品 | 日本电影久久 | 久草久视频 | 国产又黄又猛又粗 | 夜夜操天天干, | 亚洲国产精品va在线看黑人动漫 | 欧美黑人巨大xxxxx | 黄色的视频 | 国产免费三级在线观看 | 91精品国产欧美一区二区 | 中文字幕制服丝袜av久久 | 日韩黄色在线 | 成人免费电影 | 久久国产精品精品国产色婷婷 | 97视频一区 | 色婷婷视频在线 | 久久嗨| av超碰在线 | 日韩一三区 | 国产精品乱码久久久久久1区2区 | 在线免费观看的av | 亚洲一区日韩精品 | 国产乱码精品一区二区三区介绍 | 国产精品久久久av | av丝袜天堂 | 精品久久免费 | 五月天综合在线 | 黄色av大片 | 国产99久久精品一区二区永久免费 | 久久久精品欧美 | 亚洲精品在线观看免费 | 日韩动漫免费观看高清完整版在线观看 | 高清av免费看| 欧美日韩国产欧美 | 在线观看中文字幕一区二区 | 国内精品一区二区 | 韩国av一区 | 一区二区三区在线观看 | av在线激情 | 97理论片| 六月激情 | 综合色在线观看 | japanese黑人亚洲人4k | 中文字幕在线观看免费高清完整版 | 久久精品视频网站 | av网站手机在线观看 | 国产999精品久久久 免费a网站 | 国产手机精品视频 | 亚洲 成人 欧美 | 91中文字幕在线播放 | 青草草在线 | 久久激情久久 | 成人av影视观看 | 日韩精品免费一区二区三区 | 福利在线看片 | 天天操操操操操 | 久久国内精品99久久6app | 色香蕉网 | 国产在线观看免费观看 | 久久一区二区三区超碰国产精品 | 成人免费网站在线观看 | 日韩久久精品一区二区 | 天天射色综合 | 婷婷av综合 | 午夜123 | 97视频在线观看视频免费视频 | av资源网在线播放 | av中文字幕在线播放 | 六月丁香婷 | 欧美一级黄色网 | 日本黄区免费视频观看 | 视频二区 | 日韩精品视频第一页 | 国产在线免费av | 欧美日韩视频在线播放 | 国产精品欧美激情在线观看 | 手机成人av | 99国内精品久久久久久久 | 国产亚洲精品久久久久久无几年桃 | 成人久久18免费网站图片 | 亚洲国产小视频在线观看 | 欧美成人亚洲成人 | 波多野结衣小视频 | 天天干com | 青青河边草观看完整版高清 | a色视频 | 久久99国产精品视频 | 黄色a视频| 欧美精品久久久久久久久老牛影院 | 福利网址在线观看 | 亚洲韩国一区二区三区 | av不卡免费在线观看 | 国产日本亚洲高清 | 国产一级二级在线播放 | 亚洲人成在线电影 | av成人在线电影 | 精品国产日本 | 日本精品一区二区在线观看 | 天天干天天射天天操 | 亚洲免费公开视频 | 九九免费精品 | 99精品福利视频 | 国产欧美最新羞羞视频在线观看 | .国产精品成人自产拍在线观看6 | 日韩精品免费一区二区 | 日韩免费观看一区二区三区 | 精品久久毛片 | www,黄视频 | 日韩激情视频在线观看 | 日韩高清一 | 亚洲视频分类 | 五月婷婷丁香网 | 国产又粗又猛又色又黄视频 | 91在线操| 国产精品亚洲人在线观看 | 欧美精品v国产精品v日韩精品 | 欧美精品久久久久久久久久久 | 国产精品久久久久久久久久新婚 | 青青草国产精品 | 视频在线在亚洲 | 国产精品成人自拍 | 日韩精品一区二区三区免费视频观看 | www.在线观看视频 | 国产高清视频免费观看 | 色视频在线免费观看 | 中文字幕在线播放一区 | 一区 在线 影院 | 日韩欧美在线一区二区 | 国产尤物一区二区三区 | 日本久热 | av大全免费在线观看 | 91久久久久久国产精品 | 手机版av在线 | 日韩精品一区在线播放 | 欧美日韩在线观看一区二区三区 | h文在线观看免费 | 国产精品二区三区 | 国产一级电影免费观看 | 免费成人在线电影 | 国模一二三区 | 国内三级在线观看 | 国产午夜精品理论片在线 | 久久一区91 | 久久深夜福利免费观看 | 五月导航 | av中文字幕在线免费观看 | 夜夜躁狠狠躁日日躁 | 500部大龄熟乱视频 欧美日本三级 | 欧美日韩国产一区 | 日韩久久影院 | 九九九热| av免费观看网址 | 国产亚洲精品久久久久久电影 | 久草视频网 | 久久久www免费电影网 | 99精品视频中文字幕 | 四虎永久精品在线 | 久久久久国产一区二区三区 | 五月精品| 久久久久欧美精品999 | 香蕉久久久久久久 | 人人爽人人看 | 国产视频不卡一区 | 色偷偷88888欧美精品久久久 | 日本天天操| 色a综合 | 日韩精品久久久久久久电影竹菊 | 国产三级视频 | 91天天操| 国产成人福利在线观看 | 337p西西人体大胆瓣开下部 | sesese图片 | 日韩中文字幕国产 | 香蕉97视频观看在线观看 | 国产精品毛片久久久久久久久久99999999 | 国产在线观看a | 国产一区二区三区高清播放 | 97精品在线视频 | 精品国产亚洲在线 | 日本69hd| 精品视频123区在线观看 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 日本h视频在线观看 | 精品av网站 | 在线播放日韩av | 精品黄色片 | 日韩国产精品一区 | 中文字幕文字幕一区二区 | 在线观看色视频 | 日日成人网 | 久久涩视频 | 97精品国产97久久久久久 | 久久电影中文字幕视频 | 在线观看亚洲视频 | 69视频永久免费观看 | 99精品视频在线免费观看 | 人人狠狠综合久久亚洲 | 精品99在线视频 | 国产成人精品午夜在线播放 | 欧洲色吧| 亚洲精品在 | 亚洲免费视频观看 | 国产一区久久久 | 激情综合啪| 国产99自拍 | 国产亚州av| 国产五码一区 | 日韩精品观看 | 国产精品成人免费 | 国产青春久久久国产毛片 | 天天操天天干天天插 | 九九九热精品免费视频观看 | 91亚色视频在线观看 | 中文字幕成人网 | 五月婷香蕉久色在线看 | 亚洲狠狠婷婷综合久久久 | 狠狠狠狠干 | 久久一级片 | 日韩成人一级大片 | 999国产 | 亚洲午夜在线视频 | 国产精品黄 | 久操操 | 欧日韩在线 | 亚洲视频在线观看网站 | 日韩精品在线播放 | 狠狠色2019综合网 | 亚洲 欧洲 国产 精品 | 国产精品日韩在线 | 日韩欧美区 | www亚洲精品| 精品一区精品二区 | 波多野结衣在线播放一区 | 亚洲精品一区二区三区在线观看 | 97精品在线视频 | 五月婷婷黄色 | 亚洲国产手机在线 | 亚洲精品国产品国语在线 | 日本高清中文字幕有码在线 | 国模一二三区 | 人人澡视频| 日韩欧美国产激情在线播放 | 黄av在线| 91在线国内视频 | 亚洲精品在线观看中文字幕 | 狠狠成人| 欧洲一区精品 | 国产精品区二区三区日本 | 久久综合色天天久久综合图片 | 国产精品一区免费看8c0m | 日韩理论视频 | av中文字幕在线看 | 国产精品福利无圣光在线一区 | 在线观看你懂的网址 | 国产高清不卡 | 欧美疯狂性受xxxxx另类 | 久久久99精品免费观看 | 久久婷亚洲五月一区天天躁 | 国内精品久久影院 | 91麻豆精品国产91 | 国产视频精品久久 | 精品久久久久久久久久 | 国产精品成人一区二区 | 免费看污网站 | 久久天天草| 91视频传媒 | 欧美日韩视频在线播放 | 国产小视频免费在线网址 | 成人全视频免费观看在线看 | 亚洲精品黄网站 | 人人爽人人片 | 一本一道久久a久久精品蜜桃 | 色婷婷福利视频 | 五月天国产 | 日本在线观看一区 | 国产在线观看免费av | 国产精品av电影 | 黄色看片 | 国产精品久久久久永久免费 | 亚洲午夜精品久久久久久久久 | 亚洲欧洲精品一区二区精品久久久 | av资源中文字幕 | 国产免费av一区二区三区 | 国产高清av在线播放 | 丁香国产视频 | 三级av片| 亚洲精品午夜久久久久久久 | 久久婷婷视频 | 国产精品精品久久久久久 | 在线观看日韩视频 | 视频在线亚洲 | 日p视频在线观看 | 7799av|