这是一篇简单介绍了使用c#来进行文件的合并和分割,我在我的项目中,需要使用到这个模块的功能,所以自己实践之后,发于此,以作备份:
首先,我们先来做文件分割的部分,我们新建了个winform项目,项目设计如下:
这里有如下控件:
一个OpenFileDialog组件,用于选择要分割的大文件。
一个ProgressBar组件,用以显示文件分割的进度。
一个ComboBox组件,用以选择文件分割的大小。
二个TextBox组件,分别用以显示OpenFileDialog组件选择后的文件和输入分割后小文件存放的目录。
四个Label组件。
然后,给...按钮添加如下代码,当然你还需要using System.IO;
浏览文件
openFileDialog1.Title = "请选择要分割的文件名称";
DialogResult drTemp = openFileDialog1.ShowDialog();
if (drTemp == DialogResult.OK && openFileDialog1.FileName != string.Empty)
{
textBox1.Text = openFileDialog1.FileName;
button2.Enabled = true;
}
然后给执行按钮添加如下代码:
执行按钮
private void button2_Click(object sender, EventArgs e)
{
int iFileSize = Int32.Parse(comboBox1.Text) * 1024;
//根据选择来设定分割的小文件的大小
if (Directory.Exists(textBox2.Text))
Directory.Delete(textBox2.Text, true);
//如果计算机存在存放分割文件的目录,则全部删除此目录所有文件
else
Directory.CreateDirectory(textBox2.Text);
//反之则在计算机创建目录
FileStream SplitFileStream=new FileStream ( textBox1.Text , FileMode.Open ) ;
//以文件的全路对应的字符串和文件打开模式来初始化FileStream文件流实例
BinaryReader SplitFileReader=new BinaryReader ( SplitFileStream ) ;
//以FileStream文件流来初始化BinaryReader文件阅读器
byte [ ] TempBytes ;
//每次分割读取的最大数据
int iFileCount = ( int ) ( SplitFileStream.Length / iFileSize ) ;
//小文件总数
progressBar1.Maximum = iFileCount ;
if ( SplitFileStream.Length % iFileSize != 0 ) iFileCount++ ;
string [ ] TempExtra = textBox1.Text.Split ( '.' ) ;
/* 循环将大文件分割成多个小文件 */
for ( int i = 1 ; i <= iFileCount ; i++ )
{
string sTempFileName = textBox2.Text + @"\"+i.ToString ( ) .PadLeft ( 4 ,'0' ) + "." + TempExtra[ TempExtra.Length - 1 ] ; //小文件名
//确定小文件的文件名称
FileStream TempStream = new FileStream ( sTempFileName , FileMode.OpenOrCreate ) ;
//根据文件名称和文件打开模式来初始化FileStream文件流实例
BinaryWriter TempWriter = new BinaryWriter ( TempStream ) ;
//以FileStream实例来创建、初始化BinaryWriter书写器实例
TempBytes = SplitFileReader.ReadBytes ( iFileSize ) ;
//从大文件中读取指定大小数据
TempWriter.Write ( TempBytes ) ;
//把此数据写入小文件
TempWriter.Close ( ) ;
//关闭书写器,形成小文件
TempStream.Close ( ) ;
//关闭文件流
progressBar1.Value = i - 1 ;
}
SplitFileReader.Close ( ) ;
//关闭大文件阅读器
SplitFileStream.Close ( ) ;
MessageBox.Show ( "分割成功!" ) ;
progressBar1.Value = 0 ;
}
然后,设置combox的 item ,添加720、1440、2880三个item,就可以了。
编译运行如下:
然后看看你输入的存放目录下,会出现如下文件,我的源文件有16m所以有很多个小文件。