切分组合文件
谈到现在的邮箱,大家都会想到一个G字,那个时候的我很想开发出一个像Windows资源管理器一样的客户端,用上这么一个免费的午餐,大概英雄所见略同吧,你们看现在很多利用邮箱做网络硬盘的客户端都出来了,但是当我们看到那么大的邮箱最大的上传大小不能超过10M的时候,相信很多人都是一声感叹吧!!
俗话说:“上有政策,下有对策。”其实在任何地方都是通用的。也许朋友们已经想到可以把文件切分为N小块,传上去,用的时候再组合起来,good!!你们都是聪明人,我也搜索了一下这方面的软件,但我没找一款比较好的,不是只能切分指定格式的文件就是切分的速度太慢了。
踏破铁鞋无觅处,得来全不费功夫,前一段时间我去书店走走,看了一篇有关二进制读取的文章,里面介绍了有关这方面的原理和片段代码,哈哈,不就是我想要的吗?现把它贴出来,希望朋友们能从中有所收获,其实下面这些代码完成的就是一个文件切分组合的功能,而且与文件的格式无关,速度很快,想拥有我吗?还等什么:)

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using System.IO;

namespace 切分组合文件


{

/**//// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form

{
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.TextBox textBox5;
private System.Windows.Forms.TextBox textBox6;
private System.Windows.Forms.TextBox textBox7;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.OpenFileDialog openFileDialog1;

/**//// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()

{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}


/**//// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )

{
if( disposing )

{
if (components != null)

{
components.Dispose();
}
}
base.Dispose( disposing );
}


Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码

/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()

{
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.textBox4 = new System.Windows.Forms.TextBox();
this.button2 = new System.Windows.Forms.Button();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label4 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.textBox5 = new System.Windows.Forms.TextBox();
this.textBox6 = new System.Windows.Forms.TextBox();
this.textBox7 = new System.Windows.Forms.TextBox();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Controls.Add(this.button1);
this.groupBox1.Controls.Add(this.textBox1);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.textBox2);
this.groupBox1.Controls.Add(this.textBox3);
this.groupBox1.Controls.Add(this.textBox4);
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Location = new System.Drawing.Point(16, 16);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(392, 152);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "切分文件";
//
// button1
//
this.button1.Location = new System.Drawing.Point(224, 104);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(72, 23);
this.button1.TabIndex = 2;
this.button1.Text = "浏览";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(120, 24);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(256, 21);
this.textBox1.TabIndex = 1;
this.textBox1.Text = "";
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(104, 23);
this.label1.TabIndex = 0;
this.label1.Text = "被切分文件名:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 64);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(104, 23);
this.label2.TabIndex = 0;
this.label2.Text = "文件大小(Byte):";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label3
//
this.label3.Location = new System.Drawing.Point(224, 64);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(48, 23);
this.label3.TabIndex = 0;
this.label3.Text = "块数:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label5
//
this.label5.Location = new System.Drawing.Point(8, 104);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(104, 23);
this.label5.TabIndex = 0;
this.label5.Text = "分块长度(Byte):";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(120, 64);
this.textBox2.Name = "textBox2";
this.textBox2.TabIndex = 1;
this.textBox2.Text = "";
//
// textBox3
//
this.textBox3.Enabled = false;
this.textBox3.Location = new System.Drawing.Point(272, 64);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(104, 21);
this.textBox3.TabIndex = 1;
this.textBox3.Text = "";
//
// textBox4
//
this.textBox4.Location = new System.Drawing.Point(120, 104);
this.textBox4.Name = "textBox4";
this.textBox4.TabIndex = 1;
this.textBox4.Text = "5000000";
//
// button2
//
this.button2.Location = new System.Drawing.Point(304, 104);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(72, 23);
this.button2.TabIndex = 2;
this.button2.Text = "切分";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Controls.Add(this.label6);
this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.textBox5);
this.groupBox2.Controls.Add(this.textBox6);
this.groupBox2.Controls.Add(this.textBox7);
this.groupBox2.Controls.Add(this.button3);
this.groupBox2.Controls.Add(this.button4);
this.groupBox2.Location = new System.Drawing.Point(16, 176);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(392, 152);
this.groupBox2.TabIndex = 1;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "组合文件";
//
// label4
//
this.label4.Location = new System.Drawing.Point(8, 24);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(104, 23);
this.label4.TabIndex = 0;
this.label4.Text = "第一切分文件名:";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label6
//
this.label6.Location = new System.Drawing.Point(8, 64);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(104, 23);
this.label6.TabIndex = 0;
this.label6.Text = "组合文件名:";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label7
//
this.label7.Location = new System.Drawing.Point(8, 104);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(104, 23);
this.label7.TabIndex = 0;
this.label7.Text = "分块数目:";
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// textBox5
//
this.textBox5.Location = new System.Drawing.Point(120, 24);
this.textBox5.Name = "textBox5";
this.textBox5.Size = new System.Drawing.Size(256, 21);
this.textBox5.TabIndex = 1;
this.textBox5.Text = "";
//
// textBox6
//
this.textBox6.Location = new System.Drawing.Point(120, 64);
this.textBox6.Name = "textBox6";
this.textBox6.Size = new System.Drawing.Size(256, 21);
this.textBox6.TabIndex = 1;
this.textBox6.Text = "";
//
// textBox7
//
this.textBox7.Location = new System.Drawing.Point(120, 104);
this.textBox7.Name = "textBox7";
this.textBox7.TabIndex = 1;
this.textBox7.Text = "";
//
// button3
//
this.button3.Location = new System.Drawing.Point(224, 104);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(72, 23);
this.button3.TabIndex = 2;
this.button3.Text = "浏览";
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button4
//
this.button4.Location = new System.Drawing.Point(304, 104);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(72, 23);
this.button4.TabIndex = 2;
this.button4.Text = "组合";
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(424, 342);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.MaximizeBox = false;
this.Name = "Form1";
this.Text = "切分组合文件";
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.ResumeLayout(false);

}
#endregion


/**//// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()

{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)

{
if(this.openFileDialog1.ShowDialog()==DialogResult.Cancel)
return;
try

{
string FileName = this.openFileDialog1.FileName;
this.textBox1.Text = FileName;
FileInfo MyFileInfo = new FileInfo(FileName);
this.textBox2.Text = MyFileInfo.Length.ToString();
this.textBox3.Text = System.Math.Ceiling(Double.Parse(this.textBox2.Text)/Double.Parse(this.textBox4.Text)).ToString();
}
catch(Exception Err)

{
MessageBox.Show("获取文件信息出现错误:"+Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}

private void button2_Click(object sender, System.EventArgs e)

{
try

{
FileStream MyInFile = new FileStream(this.textBox1.Text,FileMode.OpenOrCreate,FileAccess.Read);
for(int i=0;i<Int32.Parse(this.textBox3.Text);i++)

{
FileStream MyOutFile = new FileStream(this.textBox1.Text+i+".xyz",FileMode.OpenOrCreate,FileAccess.Write);
int data = 0;
int FileSize = Convert.ToInt32(this.textBox4.Text);
byte[] buffer = new byte[FileSize];
if((data=MyInFile.Read(buffer,0,FileSize))>0)

{
MyOutFile.Write(buffer,0,data);
}
MyOutFile.Close();
}
MyInFile.Close();
MessageBox.Show("切分文件操作成功!","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
catch(Exception Err)

{
MessageBox.Show("切分文件出现错误:"+Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}

private void button3_Click(object sender, System.EventArgs e)

{
if(this.openFileDialog1.ShowDialog()==DialogResult.Cancel)
return;
try

{
string FileName = this.openFileDialog1.FileName;
this.textBox5.Text = FileName;
this.textBox6.Text = FileName.Substring(0,FileName.Length-5);
int i = 0;
while(System.IO.File.Exists(this.textBox6.Text+i+".xyz"))

{
i++;
}
this.textBox7.Text = i.ToString();
}
catch(Exception Err)

{
MessageBox.Show("获取文件信息出现错误:"+Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}

private void button4_Click(object sender, System.EventArgs e)

{
try

{
FileStream MyOutFile = new FileStream(this.textBox6.Text,FileMode.OpenOrCreate,FileAccess.Write);
for(int i=0;i<Int32.Parse(this.textBox7.Text);i++)

{
int data = 0;
byte[] buffer = new byte[1024];
FileStream MyInFile = new FileStream(this.textBox6.Text+i+".xyz",FileMode.OpenOrCreate,FileAccess.Read);
while((data=MyInFile.Read(buffer,0,1024))>0)

{
MyOutFile.Write(buffer,0,data);
}
MyInFile.Close();
}
MyOutFile.Close();
MessageBox.Show("组合文件操作完成","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
catch(Exception Err)

{
MessageBox.Show("组合文件出现错误:"+Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
}
}
