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

 

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

 

posted on 2017-01-18 17:42  智华  阅读(6299)  评论(3编辑  收藏  举报