using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO;
namespace text
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem menuItem3;
private System.Windows.Forms.MenuItem menuItem4;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.MenuItem menuItem5;
private System.Windows.Forms.TextBox textBox1;
public static string pathstr="";
public static int curRowNo = 0;
public static long PageNum = 0;
static ArrayList pageList = new ArrayList();
static FileStream fs;
static int maxPage = int.MaxValue;
static int pageReadBytes = 700;
private System.Windows.Forms.MenuItem menuItem6;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.TextBox PN;
private System.Windows.Forms.Label label1;
static int pageChar = 300;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItem3 = new System.Windows.Forms.MenuItem();
this.menuItem4 = new System.Windows.Forms.MenuItem();
this.menuItem6 = new System.Windows.Forms.MenuItem();
this.menuItem5 = new System.Windows.Forms.MenuItem();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.textBox1 = new System.Windows.Forms.TextBox();
this.panel1 = new System.Windows.Forms.Panel();
this.PN = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
//
// mainMenu1
//
this.mainMenu1.MenuItems.Add(this.menuItem1);
this.mainMenu1.MenuItems.Add(this.menuItem4);
//
// menuItem1
//
this.menuItem1.MenuItems.Add(this.menuItem2);
this.menuItem1.MenuItems.Add(this.menuItem3);
this.menuItem1.Text = "文件";
//
// menuItem2
//
this.menuItem2.Text = "打开";
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
//
// menuItem3
//
this.menuItem3.Text = "关闭";
this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
//
// menuItem4
//
this.menuItem4.MenuItems.Add(this.menuItem6);
this.menuItem4.MenuItems.Add(this.menuItem5);
this.menuItem4.Text = "帮助";
//
// menuItem6
//
this.menuItem6.Text = "属性";
this.menuItem6.Click += new System.EventHandler(this.menuItem6_Click);
//
// menuItem5
//
this.menuItem5.Text = "关于";
this.menuItem5.Click += new System.EventHandler(this.menuItem5_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(0, 32);
this.textBox1.Multiline = true;
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.textBox1.Size = new System.Drawing.Size(232, 160);
this.textBox1.Text = "";
this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
//
// panel1
//
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.PN);
this.panel1.Location = new System.Drawing.Point(0, 24);
this.panel1.Size = new System.Drawing.Size(240, 184);
this.panel1.Visible = false;
//
// PN
//
this.PN.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Bold);
this.PN.Location = new System.Drawing.Point(40, 40);
this.PN.Size = new System.Drawing.Size(112, 31);
this.PN.Text = "0";
this.PN.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PN_KeyDown);
//
// label1
//
this.label1.Font = new System.Drawing.Font("宋体", 24F, System.Drawing.FontStyle.Bold);
this.label1.Location = new System.Drawing.Point(32, 96);
this.label1.Size = new System.Drawing.Size(128, 32);
this.label1.Text = "ENT跳转";
//
// Form1
//
this.ClientSize = new System.Drawing.Size(490, 447);
this.Controls.Add(this.panel1);
this.Controls.Add(this.textBox1);
this.Menu = this.mainMenu1;
this.Text = "文本查看器";
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
Application.Run(new Form1());
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
openFileDialog1.Filter = "txt files (*.txt)|*.txt";
openFileDialog1.FilterIndex = 2;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pathstr = openFileDialog1.FileName;
//this.textBox1.Text = displaytext(curRowNo, pathstr);
this.Text = "文本查看器" + "1/" + PageNum.ToString();
if (fs != null) fs.Close();
pageList.Clear();
fs = File.Open(pathstr, FileMode.Open, FileAccess.Read);
PageNum = fs.Length / pageReadBytes - 120;
curRowNo = 0;
string text = ReadRow(fs, curRowNo);
if (text != null && text.Length > 0)
{
this.textBox1.Text = text;
this.Text = "文本查看器" + (curRowNo + 1).ToString() + "/" + PageNum.ToString();
this.Refresh();
}
}
this.textBox1.Focus();
}
private static string displaytext(int curRowNo,string pathstr)
{string textstr;
byte[] rowBytes;
FileStream fs = File.Open(pathstr, FileMode.Open, FileAccess.Read);
long fileLength = fs.Length;
PageNum = fileLength / 150;
rowBytes = ReadRows(fs, curRowNo);
textstr = Encoding.Default.GetString(rowBytes, 0, 150).Trim();
fs.Close();
return textstr;
}
private static byte[] ReadRows(FileStream fs, int recno)
{
byte[] rowBytes = new byte[150];
if (recno < 0) return rowBytes;
int position = recno * 150;
fs.Seek(position, SeekOrigin.Begin);
fs.Read(rowBytes, 0, 150);
return rowBytes;
}
private void menuItem3_Click(object sender, System.EventArgs e)
{
this.Close();
}
private void addtext(string pathstr)
{
try
{
StreamReader reader = new StreamReader(pathstr, System.Text.Encoding.Default);
while (reader.Peek() > 0)
{
string oneLine = reader.ReadLine();
this.textBox1.Text+=oneLine+"/r/n";
}
reader.Close();
}
catch
{
MessageBox.Show("打开请检查格式!");
}
}
private void menuItem5_Click(object sender, System.EventArgs e)
{
MessageBox.Show("小航简单文本阅读器,版权归吕顺所有!");
}
private static string ReadRow(FileStream fs, int pageNo)
{
string textstr ;
byte[] rowBytes;
int bytecount;
long startPosition = fs.Position;
for (int i = 0; i < pageList.Count; i++)
{
if (((PageInfo)pageList[i]).PageNo == pageNo)
{
bytecount =((PageInfo)pageList[i]).ByteCount;
rowBytes = new byte[bytecount];
fs.Position = ((PageInfo)pageList[i]).StartPosition;
bytecount = fs.Read(rowBytes,0, bytecount);
fs.Position = startPosition;
textstr = Encoding.Default.GetString(rowBytes, 0, bytecount);
return textstr;
}
}
if (fs.Position >= fs.Length - 1) return "";
rowBytes = new byte[pageReadBytes];
bytecount = fs.Read(rowBytes, 0, pageReadBytes);
if(bytecount == 0) return "";
int iDbCharCount = 0;
if(bytecount == pageReadBytes && rowBytes[pageReadBytes - 1] > 127)
{
for (int i = pageReadBytes - 1;i>=0;i--)
{
if(rowBytes[i] > 127)
iDbCharCount ++;
else
break;
}
}
try
{
textstr = Encoding.Default.GetString(rowBytes, 0, bytecount - iDbCharCount );
}
catch
{
textstr = Encoding.Default.GetString(rowBytes, 0, bytecount- iDbCharCount - 1);
}
textstr = textstr.Substring(0, Math.Min(pageChar, textstr.Length));
int textByteCount = Encoding.Default.GetBytes(textstr, 0, Math.Min(pageChar,textstr.Length) , rowBytes, 0);
if(bytecount < pageReadBytes - 1)
fs.Seek(0, SeekOrigin.End);
else
fs.Seek(textByteCount - bytecount, SeekOrigin.Current);
pageList.Add(new PageInfo(pageNo, startPosition,textByteCount));
return textstr;
}
private struct PageInfo
{
public PageInfo(int pageNo, long startPosition, int byteCount)
{
StartPosition = startPosition;
ByteCount = byteCount;
PageNo = pageNo;
}
public long StartPosition;
public int ByteCount;
public int PageNo;
}
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode==Keys.Left)
{
if (curRowNo >= 0)
{
curRowNo--;
string text = ReadRow(fs, curRowNo);
if (text != null && text.Length > 0)
{
this.textBox1.Text = text;
this.Text = "文本查看器" + (curRowNo + 1).ToString() + "/" + PageNum.ToString();
this.Refresh();
}
}
else
{
MessageBox.Show("已经是第一页!");
this.textBox1.Focus();
}
}
if(e.KeyCode==Keys.Right)
{
if (curRowNo <= maxPage)
{
curRowNo++;
string text = ReadRow(fs, curRowNo);
if (text != null && text.Length > 0)
{
this.textBox1.Text = text;
this.Text = "文本查看器" + (curRowNo + 1).ToString() + "/" + PageNum.ToString();
this.Refresh();
}
else
{
maxPage = curRowNo-1;
PageNum = maxPage + 1;
}
}
else
{
MessageBox.Show("已经是最后一页!");
this.textBox1.Focus();
}
}
}
private void SelectPage_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
private void PN_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
try
{
curRowNo=Convert.ToInt32(this.PN.Text);
curRowNo=curRowNo-1;
if(e.KeyCode==Keys.Enter)
{
string text = ReadRow(fs, curRowNo);
this.textBox1.Text = text;
this.Text = "文本查看器" + (curRowNo + 1).ToString() + "/" + PageNum.ToString();
this.Refresh();
MessageBox.Show("哦了!");
this.panel1.Visible=false;
this.textBox1.Focus();
}
}
catch
{
MessageBox.Show("大顺啊,请输入数字!谢谢");
}
}
private void menuItem6_Click(object sender, System.EventArgs e)
{
this.panel1.Visible=true;
this.PN.Focus();
}
}
}