三.Visual C#实现分割文件的解决方法及其具体实现步骤:
分割文件其实思路比较简单,首先要确定要分割成小文件的大小,然后确定大文件以此大小分割后的文件数目,并确定小文件的名称,最后通过创建的BinaryReader实例从大文件以确定的小文件大小读取数据,并通过创建BinaryWriter实例向创建的小文件中写入数据,循环此操作,最终实现把大文件分割成的多个小文件。其具体的实现方法请参考下面实现步骤中的第十步。以下就是Visual C#实现分割大文件程序的具体实现步骤:
1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual C#项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【文件分割】。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"目录中就产生了名称为"文件分割"的文件夹,并在里面创建了名称为"文件分割"的项目文件。具体如图01所示:
图01:【文件分割】项目之【新建项目】对话框 |
7. 把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:
一个OpenFileDialog组件,用于选择要分割的大文件。
一个ProgressBar组件,用以显示文件分割的进度。
一个ComboBox组件,用以选择文件分割的大小。
二个TextBox组件,分别用以显示OpenFileDialog组件选择后的文件和输入分割后小文件存放的目录。
四个Label组件。
二个Button组件,分别用以选择要分割的大文件和对选定文件进行分割,并在这二个Button组件拖入Form1的设计窗体后,双击它们,则系统会在Form1.cs文件分别产生这二个组件的Click事件对应的处理代码。
8. 把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并按照表05所示数值来调整组件的主要属性:
组件类型 | 组件名称 | 属性 | 设置结果 |
Button | button1 | FlatStyle | Flat |
button1 | Text | 执行 | |
button2 | FlatStyle | Popup | |
button2 | Text | ... | |
Form | Form1 | Text | 文件分割 |
Form1 | MaximizeBox | False | |
Form1 | MinimizeBox | True | |
Form1 | FormBorderStyle | FormBorderStyle.FixedSingle | |
ComboBox | comboBox1 | Items | 720 |
comboBox1 | Items | 1440 | |
comboBox1 | Items | 2880 | |
Label | label1 | Text | 请选择大小: |
label2 | Text | 请选择文件: | |
label3 | Text | 输入存放目录: | |
label4 | Text | (单位:K) | |
TextBox | TextBox1 | Text | |
TextBox2 | Text |
表05:【文件分割】项目中组件主要属性设定数值表
至此【文件分割】项目的界面设计和功能实现的准备工作就完成了,设计后的界面如图02所示:
图02:【文件分割】项目的设计后的界面 |
9. 在【解决方案资源管理器】窗口中,双击Form1.cs文件,进入Form1.cs文件的编辑界面。并在Form1.cs文件的开头,用下列导入命名空间代码替代系统缺省的导入命名空间代码。
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.IO ;
using System.Text ;
using System.Data.OleDb ;
using System.Windows.Forms.Design ;
10. 用下列代码替换Form1.cs中的button2的Click事件对应的处理代码,下列代码功能是选定要分割的大文件:
private void button2_Click ( object sender , System.EventArgs e )
{
openFileDialog1.Title = "请选择要分割的文件名称" ;
DialogResult drTemp = openFileDialog1.ShowDialog ( ) ;
if ( drTemp == DialogResult.OK && openFileDialog1.FileName != string.Empty )
{
textBox1.Text = openFileDialog1.FileName ;
button1.Enabled = true ;
}
}
11. 用下列代码替换Form1.cs中的button1的Click事件对应的处理代码,下列代码功能是按照选择的文件大小,把选定的文件按照此大小进行分割,并把分割后的文件存放到指定目录中:
private void button1_Click ( object sender , System.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 ;
}
12. 至此在上述步骤都正确完成后,【文件分割】项目的全部工作就基本完成了。此时单击快捷键F5运行程序,单击【…】按钮选择要分割的文件,输入分割文件存放的目录,并确定分割文件的大小后,单击【执行】按钮,则程序就能够把选定的文件按照选定的大小进行分割,并把分割成的文件存放输入的目录中。图03是【文件分割】项目的运行界面:
图03:【文件分割】项目的运行界面 |
Visual C#实现分割文件程序已经全部完成了,下面就来介绍Visual C#把用分割程序分割成的小文件进行合并的解决思路和具体的实现步骤。