C#版TXT文本分割器
哈!老师实验要求要做文件分割器的,这里先做个demo出来和大家分享下。
这是实验要求:1. 能进行文件分割
2. 分割块大小由用户输入决定
3. 能进行文件合并
4. 文件分割与合并过程用线程来实现
5 . 数据缓冲区不得超过2K
6. 要有处理进度显示
文本分割器的原理很简单,就是将一个较长的文本分割成指定大小的文本块,可以方便数据量较大的文本的移动。
主要是用到FileStream、StreamReader、StreamWriter对文件进行读取、创建等操作。
下面就开始进入主题:先截个图前台界面如下:
界面布局如上,同时还需要一个OpenFileDialog控件,用于打开选择文件。
主要操作:
先声明一下几个全局变量:
FileStream srcFileStream;//要将要分割的文件流
int fenGeKuaiDaXiao,wenBenChangDu;//分割块大小、文件长度
FileInfo f;//选中的文件
1、选择分割文件:
代码:
private void btntextliulan_Click(object sender, EventArgs e)
{
try{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
openFileDialog1.Filter = "所有文件(*.txt)|*.txt";
openFileDialog1.InitialDirectory = "D:\\";//默认打开D盘
f = new FileInfo(openFileDialog1.FileName);//实例化f,即选中的文件
txtfengewenjian.Text = f.FullName;//显示选中的文件的全路径
srcFileStream = new FileStream(f.FullName, FileMode.Open, FileAccess.Read);//实例化并打开分割的文件流
StreamReader streamReader = new StreamReader(srcFileStream);
txtfengewenjian.Text = f.FullName;
srcFileStream = new FileStream(f.FullName, FileMode.Open, FileAccess.Read);
wenBenChangDu = (int)f.Length/ 1024 ;
txtwenjiandaxiao.Text = wenBenChangDu.ToString();//显示文件长度
}
}
catch
{
MessageBox.Show("请确保输入的分割数字正确!");
}
}
2、选中要分割的文件,确认无误后,分割:
//分割按钮click事件处理代码
private void btnfenge_Click(object sender, EventArgs e)
{
int fenGeKuaiShu;//分割块数
fenGeKuaiDaXiao = Convert.ToInt32(txtfengekuaidaxiao.Text);//分割块大小
if (wenBenChangDu % fenGeKuaiDaXiao > 0)//如果文件长度刚好能整除分割块大小则分割块数=文件长度/分割块大小,否则分割块数=文件长度/分割块大小+1;
{
fenGeKuaiShu = wenBenChangDu / fenGeKuaiDaXiao + 1;
}
else
{
fenGeKuaiShu = wenBenChangDu / fenGeKuaiDaXiao;
}
for (int i = 0; i < fenGeKuaiShu; i++)//因为要求要用多线程来进行文件的分割、合并的,所以这里调用新的线程
{
Thread thread = new Thread(new ParameterizedThreadStart(FenGeBaoCun));//线程的参数为ParameterizedThreadStart类型的实例,ParameterizedTheadStart的参数是一个函数名,即线程将要调用的函数,如果函数是无参函数,则直接启动线程即可,如果是单参函数则在start()函数中传入参数,如果是多参函数,则对多参数封装成类,传递类对象即可,此处为单参
thread.Start(i);
}
MessageBox.Show("分割成功");
txtfengekuaidaxiao.Text = "";
txtfengewenjian.Text = "";
txtwenjiandaxiao.Text = "";
srcFileStream.Close(); //关闭要分割的文件流
}
线程调用函数:
public void FenGeBaoCun(object i)
{
using (FileStream fenGeFileStream = new FileStream(f.FullName.Substring(0,f.FullName.Length-f
补充:软件开发 , C# ,