架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#文件分割与合并 part 1 (转自互联网)

Posted on 2009-01-02 12:07  chen eric  阅读(463)  评论(0编辑  收藏  举报
 

这是一篇简单介绍了使用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所以有很多个小文件。