分割与合成文件

 

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值