写一个简单的文件阅读器 

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

C#简单的文件阅读器的更多相关文章

  1. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  2. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  3. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  4. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  5. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  6. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  7. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

  8. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  9. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

随机推荐

  1. Android 使用xml实现边框阴影,背景渐变效果(附有RGB颜色查询对照表)

    上图是显示效果,下面是代码实现: 个人理解就是使用layer-list实现两层view的叠加,其中top,left,bottom,left控制阴影 <?xml version="1.0 ...

  2. Java笔记 —— 方法重载和方法重写

    Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...

  3. 安装纯净 ubuntu linux (非虚拟机)

    //--------------- Chinese version --------------------------------------------------// 前提条件:有另一台电脑(w ...

  4. May 7th 2017 Week 19th Sunday

    A chain is no stronger than its weakest link. 链条的坚固程度取决于它最薄弱的环节. The same as the well-known buckets ...

  5. 译:Local Spectral Graph Convolution for Point Set Feature Learning-用于点集特征学习的局部谱图卷积

    标题:Local Spectral Graph Convolution for Point Set Feature Learning 作者:Chu Wang, Babak Samari, Kaleem ...

  6. python 最简单的web应用(一)

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. server.py文件 #!/usr/bin/env python # -*- coding: ...

  7. python 爬取猫眼榜单100(二)--多个页面以及多进程

    #!/usr/bin/env python # -*- coding: utf- -*- # @Author: Dang Kai # @Date: -- :: # @Last Modified tim ...

  8. grep的使用

    http://www.eguidedog.net/linux-tutorial/05-grep.php grep apple fruitlist.txt:在fruitlist.txt中查找apple字 ...

  9. 卷积神经网络CNN在自然语言处理的应用

    摘要:CNN作为当今绝大多数计算机视觉系统的核心技术,在图像分类领域做出了巨大贡献.本文从计算机视觉的用例开始,介绍CNN及其在自然语言处理中的优势和发挥的作用. 当我们听到卷积神经网络(Convol ...

  10. java、javac -version不一致(java编译及运行环境不一致)的环境变量设置问题解决

    问题描述: 电脑上同时安装了JDK1.6与1.7  设置了环境变量JAVA_HOME为jdk1.6.0_21的安装目录,并且在PATH变量中加入了%JAVA_HOME%\bin,但在Windows命令 ...