public void SplitFile(string strFlag, int intFlag, string strPath, string strFile)
{
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;
}
//以文件的全路对应的字符串和文件打开模式来初始化FileStream文件流实例
FileStream SplitFileStream = new FileStream(strFile, FileMode.Open);
//以FileStream文件流来初始化BinaryReader文件阅读器
BinaryReader SplitFileReader = new BinaryReader(SplitFileStream);
//每次分割读取的最大数据
byte[] TempBytes;
//小文件总数
int iFileCount = (int)(SplitFileStream.Length / iFileSize);
if (SplitFileStream.Length % iFileSize != 0) iFileCount++;
string[] TempExtra = strFile.Split('.');
//循环将大文件分割成多个小文件
for (int i = 1; i <= iFileCount; i++)
{
//确定小文件的文件名称
string sTempFileName = strPath + @"\" + i.ToString().PadLeft(4, '0') + "." + TempExtra[TempExtra.Length - 1];
//根据文件名称和文件打开模式来初始化FileStream文件流实例
FileStream TempStream = new FileStream(sTempFileName, FileMode.OpenOrCreate);
//以FileStream实例来创建、初始化BinaryWriter书写器实例
BinaryWriter TempWriter = new BinaryWriter(TempStream);
//从大文件中读取指定大小数据
TempBytes = SplitFileReader.ReadBytes(iFileSize);
//把此数据写入小文件
TempWriter.Write(TempBytes);
//关闭书写器,形成小文件
TempWriter.Close();
//关闭文件流
TempStream.Close();
}
//关闭大文件阅读器
SplitFileReader.Close();
SplitFileStream.Close();
Response.Write("<script>alert('文件分割成功!');</script>");
}
public void CombinFile(string[] strFile, string strPath)
{
FileStream AddStream = null;
//以合并后的文件名称和打开方式来创建、初始化FileStream文件流
AddStream = new FileStream(strPath, FileMode.Append);
//以FileStream文件流来初始化BinaryWriter书写器,此用以合并分割的文件
BinaryWriter AddWriter = new BinaryWriter(AddStream);
FileStream TempStream = null;
BinaryReader TempReader = null;
//循环合并小文件,并生成合并文件
for (int i = 0; i < strFile.Length; i++)
{
//以小文件所对应的文件名称和打开模式来初始化FileStream文件流,起读取分割作用
TempStream = new FileStream(strFile[i].ToString(), FileMode.Open);
TempReader = new BinaryReader(TempStream);
//读取分割文件中的数据,并生成合并后文件
AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));
//关闭BinaryReader文件阅读器
TempReader.Close();
//关闭FileStream文件流
TempStream.Close();
}
//关闭BinaryWriter文件书写器
AddWriter.Close();
//关闭FileStream文件流
AddStream.Close();
Response.Write("<script>alert('文件合并成功!');</script>");
}
protected void Button1_Click(object sender, EventArgs e)
{
string fileName = Server.MapPath("~/File/Combine/ASP.NET编程词典.doc");
string spiltPath = Server.MapPath("~/File/Split");
SplitFile("KB", 10, spiltPath, fileName);
}
protected void Button2_Click(object sender, EventArgs e)
{
string splitPath = Server.MapPath("~/File/Split");
string[] splitFiles = Directory.GetFiles(splitPath);
string combineFileName = Server.MapPath("~/File/Combine/ASP.NET编程词典.doc");
CombinFile(splitFiles, combineFileName);
}
}