分享

C# 通过二进制,将多个文件合并为一个。

 羊玉wngbx 2019-07-14
/// <summary>
/// 合并文件
/// </summary>
/// <param name="strDirectory"></param>
/// <param name="strMergeResultFile"></param>     
private void MergeFiles(string strInputDirectory, string strMergeResultFile)
{
    string[] arrFileNames = Directory.GetFiles(strInputDirectory);
    int iSumFile = arrFileNames.Length;
    //progressBar1.Maximum = iSumFile;
    FileStream AddStream = new FileStream(strMergeResultFile + "_temp", FileMode.OpenOrCreate);
    BinaryWriter AddWriter = new BinaryWriter(AddStream);
    long firstFileLength = 0;
    FileStream TempStream = null;
    BinaryReader TempReader = null;
    //文件长度列表
    string allFileLength = "";
    //文件长度和文件内容叠加
    {
        for (int i = 0; i < iSumFile; i++)
        {
            TempStream = new FileStream(arrFileNames[i], FileMode.Open);
            TempReader = new BinaryReader(TempStream);
            AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));
            if (firstFileLength == 0)
            {
                firstFileLength = TempReader.BaseStream.Length;
                allFileLength = firstFileLength.ToString().PadLeft(20, '0');
            }
            //暂时只处理2个文件的情况,下面是多文件
            //allFileLength += "," + TempReader.BaseStream.Length.ToString().PadLeft(20, '0');
            TempReader.Close();
            TempStream.Close();
        }
        allFileLength = allFileLength.Trim(',');
        //释放资源
        AddWriter.Flush();
        AddWriter.Close();
        AddStream.Close();
        TempStream = null;
        TempReader = null;
    }
    //创建含有头信息的文件- 也达到了加密的效果
    {
        System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
        byte[] BytesMessage = UTF8.GetBytes(allFileLength);
        AddStream = new FileStream(strMergeResultFile + "_r", FileMode.OpenOrCreate);
        AddWriter = new BinaryWriter(AddStream);
        //文件头
        AddWriter.Write(BytesMessage);
        //写入原来文件
        TempStream = new FileStream(strMergeResultFile, FileMode.Open);
        TempReader = new BinaryReader(TempStream);
        AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));
        long cc = TempReader.BaseStream.Length;
        TempReader.Close();
        AddWriter.Flush();
        AddWriter.Close();
        TempStream.Close();
        //释放
        TempReader = null;
        AddWriter = null;
        TempStream = null;
    }
    //删掉临时
    File.Delete(strMergeResultFile + "_temp");
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约