C#简单的文件阅读器
写一个简单的文件阅读器
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#简单的文件阅读器的更多相关文章
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
随机推荐
- jquery 根据日期计算年龄
<script type="text/javascript"> //jquery页面加载完成后,根据后端的出生日期,计算年龄 $(function () { // 获得 ...
- jquery常用属性与方法
1..css( )给指定的样式设置样式值: 2..attr(attributeName,value) /.removeAttr(attributeName);给指定的属性设置值 / 清除所有匹配的元素 ...
- jquery的全选和多选操作
//全选产品 $('#checkAll').click(function() { $(this).prop('checked',!$(this).prop('checked')); if($(this ...
- jquery_lazyload插件
延迟加载图片的 jQuery 插件 http://www.neoease.com/lazy-load-jquery-plugin-delay-load-image/
- Mac下配置apach服务
有的时候,我们需要在内网工作组中分享一些文件或是后台接口没有及时给出,你又想要模拟真实数据,直接在项目里创建plist也可以做到这种需求,但难免让工程变得冗余且看起来比较Low.这个时候就看出配置本地 ...
- Linux安装中文字体包
进入rhel5.5安装盘/Server路径找到字体安装包: fonts-chinese-3.02-12.el5.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.no ...
- 【js基础修炼之路】— null和undefined的区别
在近期的复习期间遇到null和nudefined,于是通过查找资料,想写一篇文章来说明他们的区别.. javaScript高级程序设计: 在使用var声明变量但未对其加以初始化时,这个变量的值就是un ...
- Javascript作业—数字转化为大写
开始学javascript,写作业. <script type="text/javascript"> function toChinese(money){ var ch ...
- Nginx启用Gzip压缩js无效的原因
Nginx启用gzip很简单,只需要设置一下配置文件即可完成,可以参考文章Nginx如何配置Gzip压缩功能.不过,在群里常有人提到,他们的网站Gzip压缩虽然成功了,但检测到JS仍然没有压缩成功,这 ...
- 剑指offer39 平衡二叉树
剑指上用了指针传递,这里用的引用传递 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { ; return IsB ...