程序界面:
分割界面:
合并界面:
文件源代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace 文件分割与合并工具
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSFile_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtFile.Text = openFileDialog.FileName;
}
}
private void btnSplit_Click(object sender, EventArgs e)
{
if (txtLength.Text == "")
{
MessageBox.Show("请输入要分割的文件大小!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtLength.Focus();
}
else if (cboxUnit.Text == "")
{
MessageBox.Show("请选择要分割的文件单位!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
cboxUnit.Focus();
}
else
{
SplitFile(cboxUnit.Text, Convert.ToInt32(txtLength.Text.Trim()), txtPath.Text, txtFile.Text, progressBar);
}
}
public void SplitFile(string strFlag, int intFlag, string strPath, string strFile, ProgressBar PBar)
{
int iFileSize = 0;
switch (strFlag)
{
case "Byte":
iFileSize = intFlag;
break;
case "KB":
iFileSize = intFlag * 1024;
break;
case "MB":
iFileSize = intFlag * 1024 * 1024;
break;
case "GB":
iFileSize = intFlag * 1024 * 1024 * 1024;
break;
}
if (!Directory.Exists(strPath))
{
Directory.CreateDirectory(strPath);
}
FileStream SplitFileStream = new FileStream(strFile, FileMode.Open);
BinaryReader SplitFileReader = new BinaryReader(SplitFileStream);
byte[] TempBytes;
int iFileCount = (int)(SplitFileStream.Length / iFileSize);
PBar.Maximum = iFileCount;
if (SplitFileStream.Length % iFileSize != 0) iFileCount++;
string[] t=strFile.Split('\\');
string m = t[t.Length - 1];
string[] TempExtra = m.Split('.');
for (int i = 1; i <= iFileCount; i++)
{
string sTempFileName = strPath + @"\" +TempExtra[TempExtra.Length-2]+i.ToString().PadLeft(3, '0') + "." + TempExtra[TempExtra.Length - 1];
FileStream TempStream = new FileStream(sTempFileName, FileMode.OpenOrCreate);
BinaryWriter TempWriter = new BinaryWriter(TempStream);
TempBytes = SplitFileReader.ReadBytes(iFileSize);
TempWriter.Write(TempBytes);
TempWriter.Close();
TempStream.Close();
PBar.Value = i - 1;
}
SplitFileReader.Close();
SplitFileStream.Close();
MessageBox.Show ("文件分割成功!");
txtFile.Text = "";
txtLength.Text = "";
txtPath.Text = "";
PBar.Value = 0;
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 mysplash = new Form2();
mysplash.ShowDialog();
timer1.Start();
}
private void btnCombin_Click(object sender, EventArgs e)
{
if (txtCFile.Text.IndexOf(",") == -1)
MessageBox.Show("请选择要合并的文件,最少为两个!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
{
string[] strFiles = txtCFile.Text.Split(',');
CombinFile(strFiles, txtCPath.Text, progressBar1);
}
}
public void CombinFile(string[] strFile, string strPath, ProgressBar PBar)
{
PBar.Maximum = strFile.Length;
FileStream AddStream = null;
AddStream = new FileStream(strPath, FileMode.Append);
BinaryWriter AddWriter = new BinaryWriter(AddStream);
FileStream TempStream = null;
BinaryReader TempReader = null;
for (int i = 0; i < strFile.Length; i++)
{
TempStream = new FileStream(strFile[i].ToString(), FileMode.Open);
TempReader = new BinaryReader(TempStream);
AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));
TempReader.Close();
TempStream.Close();
PBar.Value = i + 1;
}
AddWriter.Close();
AddStream.Close();
MessageBox.Show("文件合并成功!");
txtCFile.Text = "";
txtCPath.Text = "";
PBar.Value = 0;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (txtFile.Text != "" && txtPath.Text != "")
btnSplit.Enabled = true;
else
btnSplit.Enabled = false;
if (txtCFile.Text != "" && txtCPath.Text != "")
btnCombin.Enabled = true;
else
btnCombin.Enabled = false;
}
private void btnCFile_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
if (txtCFile.Text == "")
{
int i = 0;
for(i=0;i<openFileDialog.FileNames.Length - 1;i++)
{
txtCFile.Text+=openFileDialog.FileNames[i].ToString()+",";
}
txtCFile.Text += openFileDialog.FileNames[i].ToString();
}
else
{
int i = 0;
for (i = 0; i < openFileDialog.FileNames.Length - 1; i++)
{
txtCFile.Text += openFileDialog.FileNames[i].ToString() + ",";
txtCFile.Text += openFileDialog.FileNames[i].ToString();
}
}
}
}
private void btnCPath_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
txtCPath.Text = saveFileDialog.FileName;
}
}
private void btnSPath_Click(object sender, EventArgs e)
{
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
txtPath.Text = folderBrowserDialog.SelectedPath;
}
}
}
}
工具的应用:可以分割一些大的文本文件。不能分割电影文件,分割后电影文件不能使用,合并后能用。在网络传输文件时可以把大的文件分成小的文件传输,然后再合并。
下面是源文件的下载地址: