写一个简单的文件阅读器 

1、可以读取大文件(2G)
2、实现首页、下一页、前一页、末页的跳转
3、实现到指定页面的跳转,比如跳转到第**页
4、限制每页显示字符数 1029-4069byte,且用户可自定义该值
5、界面要能实时响应
6、用户可以创建自己的txt文件
7、界面可尽可能的简单

第一步:画界面

第二步:相应事件

上代码

 using System;
using System.IO;
using System.Text;
using System.Windows.Forms; namespace txtReader
{
public partial class Form1 : Form
{
private static int PageTotal = ;
private static int PageCurrent = ;
public Form1()
{
InitializeComponent();
} /// <summary>
/// 打开文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TsMenuOpen_Click(object sender, EventArgs e)
{
if (ofd.ShowDialog() == DialogResult.OK)
{
PageCurrent = ;
ReadTxt();
}
} private void ReadTxt()
{
byte[] byts = new byte[decimal.ToInt32(numericUpDown2.Value)];
using (var fs = File.OpenRead(ofd.FileName))
{
int MValue = decimal.ToInt32(numericUpDown2.Value);
int ValueFrom = MValue * PageCurrent;
fs.Position = ValueFrom;
fs.Read(byts, , MValue);
if (byts != null)
{
int v = (int)((fs.Length / decimal.ToInt32(numericUpDown2.Value)) + );
PageTotal = v;
txtShow.Text = Encoding.Default.GetString(byts);
}
fs.Close();
}
} /// <summary>
/// 保存文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TxMenuSave_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "文本文件|*.txt";
if (DialogResult.OK == sfd.ShowDialog())
{
using (StreamWriter sw = new StreamWriter(sfd.FileName, false, Encoding.Default))
{
sw.WriteLine(txtShow.Text.Trim());
sw.Close();
}
}
}
/// <summary>
/// 关闭文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TxMenuClose_Click(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// 首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnFirst_Click(object sender, EventArgs e)
{
PageCurrent = ;
ReadTxt();
}
/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnPagePre_Click(object sender, EventArgs e)
{
PageCurrent = PageCurrent > ? PageCurrent - : ;
ReadTxt();
}
/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnPageNext_Click(object sender, EventArgs e)
{
PageCurrent++;
ReadTxt();
}
/// <summary>
/// 尾页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnPageEnd_Click(object sender, EventArgs e)
{
PageCurrent = PageTotal - ;
ReadTxt();
}
/// <summary>
/// 跳转
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnPageTo_Click(object sender, EventArgs e)
{
PageCurrent = decimal.ToInt32(numericUpDown1.Value);
ReadTxt();
}
}
}

总结

这个小功能难点只用这个

确定读取文件的位置,和每次只读指定部分字符

 using (var fs = File.OpenRead(ofd.FileName))
{
int MValue = decimal.ToInt32(numericUpDown2.Value);
int ValueFrom = MValue * PageCurrent;
fs.Position = ValueFrom;
fs.Read(byts, , MValue);
if (byts != null)
{
int v = (int)((fs.Length / decimal.ToInt32(numericUpDown2.Value)) + );
PageTotal = v;
txtShow.Text = Encoding.Default.GetString(byts);
}
fs.Close();
}

最后附上项目下载源码txtReader.zip

最新文章

  1. JQuery中隐藏/显示事件函数
  2. iOS的TCP/IP协议族剖析&amp;&amp;Socket
  3. 表单提交set集合问题
  4. Unity自动打包Apk
  5. RSA密钥的生成与配置
  6. Ajax如何解决跨域问题
  7. 背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)
  8. PHP得出附件扩展名
  9. LightOj_1104 Birthday Paradox
  10. Linux之文件备份与恢复
  11. luogu P5289 [十二省联考2019]皮配
  12. python全栈开发 * 15知识点汇总 * 180621
  13. rabbit初学之连接测试2
  14. Lemur编写索引器
  15. Maven学习(四)eclipse创建maven项目
  16. Codeforces Round #296 (Div. 1) C. Data Center Drama 欧拉回路
  17. .NET:CLR via C# Shared Assemblies and Strongly Named Assemblies
  18. poj3208 Apocalypse Someday 数位dp+二分 求第K(K &lt;= 5*107)个有连续3个6的数。
  19. HDU 2586 倍增法求lca
  20. JAVA常见集合类

热门文章

  1. mysql-查询(DQL)
  2. css属性(常用属性整理)
  3. 使用js来执行全屏
  4. (13)JavaScript之[HTML DOM元素][JS对象]
  5. 一道Java集合框架题
  6. ArcGIS API for JavaScript开发初探——基本地图组件使用
  7. 笨办法学Python(二十八)
  8. java集合框架——工具类
  9. 后缀数组入门(二)——Height数组与LCP
  10. Netbackup:nbu常见错误及故障解决