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