C#txt文本分割器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;//openfiledialog
using System.IO;//文本处理namespace CutTxt
{public partial class mainForm : Form{string fileLocation = "";//文件的位置long fileLenth = 0;//文件的大小(字节)int fileLines = 0;//文本内容的行数int setLines = 0;//自定义的行int page = 0;//分割的页数public mainForm(){InitializeComponent();}//浏览按钮的事件private void bt_browseFile_Click(object sender, EventArgs e){OpenFileDialog open1 = new OpenFileDialog();open1.InitialDirectory = "C:\\";open1.Filter = "文本文件 (*.txt)|*.txt|All files (*.*)|*.*";open1.FilterIndex = 1;open1.RestoreDirectory = false;if (open1.ShowDialog() == DialogResult.OK){fileLocation = open1.FileName;tb_fileLocation.Text = fileLocation;tb_lineNumber.Enabled = true;tb_lineNumber.Text = "0";fileLines = getTxtProperty(tb_fileLocation.Text);//获取文件大小FileInfo file1 = new FileInfo(tb_fileLocation.Text);fileLenth = file1.Length;lb_txtProperty.Text = "文章段落数:【" + fileLines.ToString()+ "】 段," + "文件大小:【" + fileLenth.ToString() + " 】字节。";                }}//分割按钮的事件private void bt_cutFiles_Click(object sender, EventArgs e){if (tb_fileLocation.Text == ""){MessageBox.Show("请指定文件路径!"); }else if (tb_lineNumber.Text == "0")            {MessageBox.Show("请设置分割的行数!");}else{cutTxt(fileLocation, int.Parse(tb_lineNumber.Text)); }}//得到行数public int getTxtProperty(string fileLocation){StreamReader sr = new StreamReader(fileLocation);string aa = "";int bb = 0;while ((aa = sr.ReadLine()) != null){bb++; }return bb;}//开始分割public void cutTxt(string fileLocation, int lineNumbers){string [] recordLine = new string[fileLines];//定义行数大小的数组int ii = 0;            string tmpLine = "";StreamReader sr = new StreamReader(fileLocation,Encoding.GetEncoding("gb2312"));while ((tmpLine = sr.ReadLine()) != null){recordLine[ii] = tmpLine;ii++;}//开始处理分割int curLine = 0;//工作行int curPage=0;//当前工作篇for (int p = 0; p < page-1; p++)//先写前n篇,最后一篇单独写{StreamWriter sw = new StreamWriter("Xiangjun"+p+".txt", true, Encoding.GetEncoding("gb2312"));for (int j = curLine; j < curLine+setLines; j++){sw.Write(recordLine[j]);sw.Write("\r\n");//写完一行后换行                    }sw.Flush();sw.Close();curLine += setLines;curPage=p;//MessageBox.Show("当前索引:" + curLine+"当前page值:"+curPage); }//写最后一篇StreamWriter sw_Last = new StreamWriter("Xiangjun" + (curPage+1) + ".txt", true, Encoding.GetEncoding("gb2312"));for (int j = curLine; j < fileLines; j++){sw_Last.Write(recordLine[j]);sw_Last.Write("\r\n");//写完一行后换行 //MessageBox.Show("当前索引:" + j);   }sw_Last.Flush();sw_Last.Close();MessageBox.Show("分割成功!");}//当设置的行数更改时,记录其数值//设置文本框失效事件,在form1.Designer.cs中private void tb_lineNumber_LostFocus(object sender, EventArgs e){//定义未使用            }private void tb_lineNumber_TextChanged(object sender, EventArgs e){setLines = int.Parse(tb_lineNumber.Text);if (setLines != 0){page = (fileLines / setLines) + 1;//获取篇数lb_pageNum.Text = "您设置了【" + setLines + "】段为一页,预计将产生【" + page + "】个文件。";                }else{lb_pageNum.Text = "无法设置0个段落!";}}private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){System.Diagnostics.Process.Start("mailto:liuxiangjun@188.com");}}
}
View Code

实验要求:
1. 能进行文件分割
2. 分割块大小由用户输入决定
3. 能进行文件合并
4. 文件分割与合并过程用线程来实现
5. 数据缓冲区不得超过2K
6. 要有处理进度显示

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;namespace WindowsFormsApplication1
{public partial class 文件分割器1 : Form{//时间:2012-9-6//作者:Olive//功能:实现大文件的分割、合并#region Members
        int count1,count,fgkDaXiao;FileInfo fFenGe,fHeBing;FileStream fStream,hStream;string fenGeLuJing,heBingLuJing;int value = 0;#endregion#region Methods
        public 文件分割器1(){InitializeComponent();skinEngine1.SkinFile = "WarmColor1.ssk";}/// <summary>///   选择要分割的文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnfgwenjian_Click(object sender, EventArgs e){try{if (openFileDialog1.ShowDialog() == DialogResult.OK){fFenGe = new FileInfo(openFileDialog1.FileName);txtfenge.Text = fFenGe.FullName;fenGeLuJing = fFenGe.FullName.Substring(0, fFenGe.FullName.Length - openFileDialog1.SafeFileName.Length);txtwjdaxiao.Text = ((int)fFenGe.Length/1024).ToString();fStream = new FileStream(fFenGe.FullName, FileMode.Open, FileAccess.Read);}}catch{MessageBox.Show("文件分割异常,请检查确认无误后再次分割!"); }}/// <summary>/// 选择要保存的路径,如果不选默认为与原文件同路径/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnfglujing_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(txtfgkdaxiao.Text)){MessageBox.Show("请输入文件分割块大小!");}if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){txtfglujing.Text= folderBrowserDialog1.SelectedPath;fenGeLuJing = folderBrowserDialog1.SelectedPath+"\\";}}   /// <summary>/// 分割文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnfenge_Click(object sender, EventArgs e){try{int wenJianLength = Convert.ToInt32(txtwjdaxiao.Text);if (wenJianLength % fgkDaXiao == 0){count = wenJianLength / fgkDaXiao;}else{count = wenJianLength / fgkDaXiao + 1;}for (int i = 0; i < count; i++){Thread thread = new Thread(new ParameterizedThreadStart(FenGe));thread.Start(i);}MessageBox.Show("文件分割完毕");}catch{MessageBox.Show("分割异常,请确认操作!");}}/// <summary>/// 分割线程调用函数/// </summary>/// <param name="i"></param>public void FenGe(object i){try{using (FileStream fgstream = new FileStream(fenGeLuJing + fFenGe.Name.Substring(0, fFenGe.Name.Length - fFenGe.Extension.Length) + i + fFenGe.Extension, FileMode.OpenOrCreate, FileAccess.Write)){byte[] buffer = new byte[fgkDaXiao * 1024];int data = 0;if ((data = fStream.Read(buffer, 0, buffer.Length)) > 0){BinaryWriter bWriter = new BinaryWriter(fgstream, Encoding.Default);bWriter.Write(buffer, 0, data);value=(int)i/count*100;progressBar1.Value = value;}}}catch{MessageBox.Show("文件打开异常!");}}/// <summary>/// 输入值变化/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void txtfgkdaxiao_TextChanged(object sender, EventArgs e){if (txtfgkdaxiao.Text.Length > 0){fgkDaXiao = Convert.ToInt32(txtfgkdaxiao.Text);}}/// <summary>/// 选择要合并的文件,首个分割文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnhbwenjian_Click(object sender, EventArgs e){if (openFileDialog1.ShowDialog() == DialogResult.OK){fHeBing = new FileInfo(openFileDialog1.FileName);txthebing.Text = fHeBing.FullName;heBingLuJing = fHeBing.FullName.Substring(0, fHeBing.FullName.Length - openFileDialog1.SafeFileName.Length) + "\\";}}/// <summary>/// 选择合并后的文件的保存路径/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnhebinglujing_Click(object sender, EventArgs e){if (folderBrowserDialog1.ShowDialog() == DialogResult.OK){heBingLuJing = folderBrowserDialog1.SelectedPath + "\\";}}/// <summary>/// 合并文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){try{if (count1 > 0){using (hStream = new FileStream(heBingLuJing + fHeBing.Name.Substring(0, fHeBing.Name.Length - fHeBing.Extension.Length - 1) + fHeBing.Extension, FileMode.OpenOrCreate, FileAccess.Write)){for (int i = 0; i < count1; i++){Thread thread = new Thread(new ParameterizedThreadStart(HeBing));thread.Start(i);}MessageBox.Show("合并完成");}}else{MessageBox.Show("请输入合并文件数目");}}catch{MessageBox.Show("合并异常,请重新合并");}}    /// <summary>/// 求要合并的文件数/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void txthbkuaishu_TextChanged(object sender, EventArgs e){count1 = Convert.ToInt32(txthbkuaishu.Text);}/// <summary>/// 合并线程调用的合并函数,执行文件合并/// </summary>/// <param name="i"></param>public void HeBing(object i){using (FileStream readStream = new FileStream(fHeBing.FullName.Substring(0, fHeBing.FullName.Length - fHeBing.Extension.Length- 1) + i + fHeBing.Extension, FileMode.Open, FileAccess.Read)){byte[] buffer = new byte[readStream.Length];int data = 0;if ((data = readStream.Read(buffer, 0, buffer.Length)) > 0){BinaryWriter binary = new BinaryWriter(hStream, Encoding.Default);binary.Write(buffer, 0, data);}}}#endregion
    }
}本文主要用到了FileStream、FileInfo类、BinaryWriter、StreamReader、StreamWriter等常用文件操作类,而且还用到了线程的知识,如果有不懂的地方,希望可以和我交流,共同学习进步
View Code

 

转载于:https://www.cnblogs.com/blogpro/p/11343909.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352031.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

一文带你了解MySQL之事务隔离级别和MVCC

目录 一、数据准备二、事务隔离级别2.1 事务并发执行遇到的问题2.2 SQL标准中的四种隔离级别2.3 MySQL中支持的四种隔离级别 三、MVCC3.1 版本链3.2 ReadView3.2.1 READ COMMITTED3.2.2 REPEATABLE READ 3.3 MVCC小结 四、关于purge五、总结 一、数据准备 为了我们学习的顺利进…

从FC到Wii 24年来游戏机CPU发展历程回顾

作者&#xff1a;吴愧 从小学开始&#xff0c;游戏机就伴随着我走过一段快乐、辛酸的历程。宁愿早上饿肚子&#xff0c;也要省吃减用存钱买游戏卡&#xff0c;或者添钱换卡玩。好不容易有钱买到新的游戏卡&#xff0c;高兴得乐翻天&#xff0c;玩到饭都能都忘记吃。对于家里那些…

MotioninJoy安装教程-版本0.6.0003

摘要: SONY的PS3游戏主机配置的DS3(DUALSHOCK 3)手柄质量手感都不错&#xff0c;特别是喜欢PS系手柄玩实况足球的玩家来说就是不二的选择。DUALSHOCK 3本身包括蓝牙无线和USB有线的通信方式&#xff0c;但是都不是标准的数据格式&#xff0c;所以在电脑系 ... SONY的PS3游戏主机…

感叹游戏行业的飞速发展

现在的游戏大作层出不穷&#xff0c;玩着这些3A大作&#xff0c;有时候不禁让我想起小时候玩小霸王游戏机的时光&#xff0c;虽然小霸王游戏是抄袭任天堂的红白机&#xff0c;但确实给国内的孩子们带来了无限的乐趣。那个时候一起玩耍的小伙伴们&#xff0c;都会要求父母给自己…

G502使用计算机配置,罗技g502dpi设置配置文件 | 手游网游页游攻略大全

发布时间&#xff1a;2016-06-27 我是用罗技力反馈EX 以下是设置截图 [不知道是不是游戏有BUG,我的方向盘始终没有出现自然震动.但是一按手刹车就会震动个不停] 第一步: 请在罗技驱动方向盘驱动程序下,选择双轴 [也就是图中的组合那里不要打勾,要不然 ... 标签&#xff1a; 攻…

推荐一个ps3的六轴手柄在windows下的驱动

和Xbox360手柄的适配器和电池盒需要另外购买比起来&#xff0c;PS3手柄比较厚道&#xff0c;基本上是一次性到位&#xff08;蓝牙适配器的价格就几乎忽略不计了&#xff09;&#xff0c;但PS3手柄在Windows下却没有官方的驱动&#xff0c;导致无法发挥其强悍的功能&#xff0c;…

DirectInput手柄在Windows环境下震动实现

DirectInput手柄Windows环境下震动实现 背景1.direcrInput手柄震动控制1.1运行环境1.2代码实现 2 模拟XInput设备&#xff0c;通过XInput实现2.1 x360ce设置 2.2 XInput 代码实现2.3 x360ce分析 背景 近期项目里面有个需求&#xff0c;需要在控制终端上安装摇杆&#xff0c;且…

虚幻4UE4使用PS4 DualShock4手柄ProController Switch手柄

虚幻4UE4使用PS4 DualShock4手柄ProController Switch手柄 使用虚幻引擎绑定输入操作可参考我的另一篇文章。虚幻4 UE4 绑定按键操作及切换视角-CSDN博客 使用虚幻引擎开发经常会碰到使用手柄或其他输入设备进行输入的情况&#xff0c;虽然在引擎->输入中有游戏手柄的各种…

Maven 打包插件 maven-jar-plugin

文章目录 指定版本生成可执行 Jar准备依赖&#xff0c;并指定依赖位置自动下载依赖的 Jar 文件 打包时排除文件与其他常用打包插件比较 本文是对 maven-jar-plugin 常用配置的介绍&#xff0c;更详细的学习请参照 Apache Maven JAR Plugin 官方文档 这是 maven 生命周期 packa…

Linux系统中使用Xbox360手柄

最近一个项目中需要用到Xbox360游戏手柄&#xff0c;硬件平台为周立功A7开发板&#xff0c;EPC-6G2C-L&#xff0c;折腾半天&#xff0c;终于弄好了&#xff1b; 正常电脑Ubuntu系统是自带手柄驱动的&#xff0c;将手柄插上电脑USB接口&#xff0c;将自动出现设备接口文件&…

dll修复都有哪些方法?详细解析各种dll修复方法

DLL&#xff08;动态链接库&#xff09;是 Windows 操作系统中的一种重要文件&#xff0c;它包含了许多程序所需的函数和资源。因此&#xff0c;当 DLL 文件出现问题时&#xff0c;可能会导致程序无法正常运行&#xff0c;甚至整个系统崩溃。这时候需要使用 DLL 修复工具进行修…

ROS:常用可视化工具的使用

目录 一、日志输出工具——rqt_console二、绘制数据曲线——rqt_plot三、图像渲染工具——rqt_image_view四、图形界面总接口——rqt五、Rviz六、Gazebo 一、日志输出工具——rqt_console 启动海龟键盘控制节点&#xff0c;打开日志输出工具 roscorerosrun turtlesim turtles…

linux版drastic模拟器设置,DraStic nds模拟器下载安装及使用图文教程

近日&#xff0c;曾便携过PSP用GBA模拟器的开发者Exophase发布了一款安卓用的NDS模拟器《DraStic》&#xff0c;DraStic曾是Exophase为开源掌机潘多拉编写的一款功能强大的NDS模拟器&#xff0c;现在移植到了Android。 你会在下载到的Download文件夹内发现三个文件&#xff0c;…

【娇娘内核】完整解密

这个很好&#xff0c;一直想了解的&#xff0c;转之。原帖&#xff0c;感谢“华敏乐” &#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#…

《口袋妖怪 太阳/月亮》正式公布 简体中文确认

Pokmon(大陆通常意译为<口袋妖怪>, 港译为<寵物小精靈>,台译为<神奇寶貝>)系列作为任天堂平台的的招牌游戏之一, 自诞生20年以来在全球有非常多的玩家. 此前发布的版本内置了8国语言, 但是并没有中文.其实中国玩家也非常多, 所以经常拿"8国语言"来…

[转幺幺]硬件解码—NDS影音播放专家iPlayer卡评测

转&#xff1a;幺幺任天堂 前言&#xff1a;DS并不缺乏多媒体能力&#xff0c;虽然任天堂官方没有给它加入这些&#xff0c;但是通过自制软件&#xff0c;我们已经实现了用DS听音乐、看电子书、看视频等功能。看书看图听音乐这些功能已经比较完美了&#xff0c;而且支持的都是目…

自己动手丰衣足食-自己动手修改GBA ROM游戏文件

经过一天的努力终于琢磨出怎么修改GBA的游戏文件也就是俗称的ROM文件&#xff0c;起因是因为偶然看到二手GBM&#xff0c;顿时抑制不住买了一台&#xff0c;可惜买得晚了&#xff0c;完美运行游戏又带金手指功能的烧录卡买不到了。SUPERCARD烧录卡看评论说费电&#xff0c;玩游…

【3DS】必做清单

3DS必做清单 引言 翻新后的小贴士 本文用于记录我的New Nindendo 3DSLL 软件翻新历程。 因为国内很多都提供现成的懒人包&#xff0c;如果上游有更新&#xff0c;没办法第一时间拿到。 如果你的网络条件够好&#xff0c;可以试试在Universal-Updater里面搜对应软件名字就好. 晚…

dstwo linux 模拟器,dstwo sfc模拟器插件Catsfc使用教程

dstwo作为史上最为优秀的一款nds烧录卡&#xff0c;这个烧录卡不仅支持完美运行nds游戏&#xff0c;还可以利用强大的硬件来运行许多经典模拟器游戏&#xff0c;其中就包括经典的sfc模拟器&#xff0c;下面给大家带来一款目前在兼容性和速度最好的dstwo用sfc模拟器插件Catsfc的…

nds linux模拟器下载,NDS模拟器Desmume

DeSmuME是一个 Nintendo Dual Screen 模拟器。开源&#xff0c;更新很勤快有希望能替代 No$GBA。DeSmuME是一个开源的适用于Linux&#xff0c;Mac OS和Windows的任天堂DS(NDS)模拟器。 DeSmuME支持保存&#xff0c;增加屏幕的大小&#xff0c;支持的过滤器&#xff0c;以提高图…