写一个简单的文件阅读器 

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. 基于Python的开源人脸识别库:离线识别率高达99.38%

    项目地址:https://github.com/ageitgey/face_recognition#face-recognition 本文的模型使用了C++工具箱dlib基于深度学习的最新人脸识别方法 ...

  2. 【起航计划 029】2015 起航计划 Android APIDemo的魔鬼步伐 28 App->Preferences->Default Values 偏好默认值

    DefaultValues 介绍了如何在XML中定义Preference的缺省值. <CheckBoxPreference android:key="default_checkbox& ...

  3. 解决javascript四舍五入不准确

    function roundFixed(num, fixed) { var pos = num.toString().indexOf('.'), decimal_places = num.toStri ...

  4. Google面试准备

    本人小弱,面试过了Google的HC,虽然team match还没完成,到最后还有变数.但对自己这段时间的努力,也算一个交代了. 最初是一年半前Google的HR联系到我,然后第一次在电面就挂了.经过 ...

  5. mybatis返回boolean值时数据库返回null

    Servlet.service() for servlet [springDispatcherServlet] in context with path [/ms] threw exception [ ...

  6. Node.js-sublime text3 配置node.js(ERROR: The process "node.exe" not found.)

    默认已经安装好sublime.node和npm 1.sublime的node.js插件下载 由于在package control上经常下载失败,所以这里直接从GitHub上进行下载! GitHub下载 ...

  7. vue checkbox 双向绑定及初始化渲染

    双向绑定可以绑定到同一个数组 <input type="checkbox" id="jack" value="Jack" v-mode ...

  8. Linux 信号表 signals

    Linux支持POSIX reliable signals和POSIX real-time signals. 信号处理 进程接受到信号之后会有一些默认的处理方式,如下为5种处理方式: type des ...

  9. ASP.NET Core - VSCode安装和配置

    在深入了解ASP.NET Core之前先研究了下主要的两个开发工具(VS 2015和VS Code), VS 2015对Core的支持已经相当的完备,很多操作得到简化用起来很是方便.VS Code是微 ...

  10. selenium 打开浏览器报错java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/String;)

    java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/Strin ...