文件分割代           FileInfo fInfo = new FileInfo("c:\\xx.rar");
           int splitSize = 1024 * 400;
           int splitCount = (int)fInfo.Length % splitSize==0 ? (int)fInfo.Length / splitSize : (int)fInfo.Length / splitSize + 1;
            FileStream fileStream = new FileStream(fInfo.FullName,FileMode.Open,FileAccess.Read);
            BinaryReader reader = new BinaryReader(fileStream);
            for (int i = 0; i < splitCount; i++)
            {
                string tempName = "temp_" + i.ToString();
                FileStream fs = new FileStream("c:\\tempfile" + tempName,FileMode.CreateNew,FileAccess.Write);
                BinaryWriter tempWriter = new BinaryWriter(fs);
                byte []tempData= reader.ReadBytes(splitSize);
                if (tempData.Length == 0)
                {
                    break;
                }
                tempWriter.Write(tempData, 0, tempData.Length);
                tempWriter.Flush();
                tempWriter.Close();
                fs.Close();
            }
            reader.Close();
            fileStream.Close(); 文件合并代码:            DirectoryInfo dir = new DirectoryInfo("D:\\tempfile");
            FileInfo[] fs = dir.GetFiles();
            var sorts = from singlefile in fs
                        orderby singlefile.Name ascending
                        select singlefile;            string fullname = "D:\\xx.rar"
            FileStream fileStream = new FileStream(fullname,FileMode.CreateNew,FileAccess.Write);
            BinaryWriter writer = new BinaryWriter(fileStream);            foreach (FileInfo f in sorts)
            {
                FileStream tempStream = new FileStream(f.FullName, FileMode.Open, FileAccess.Read);
                BinaryReader tempReader = new BinaryReader(tempStream);
                byte[] data = tempReader.ReadBytes(1024 * 400);
                writer.Write(data, 0, data.Length);
                writer.Flush();
                tempReader.Close();
                tempStream.Close();
            }
            writer.Flush();
            writer.Close();
            fileStream.Close(); 对exe文件和其他类型文件都没问题 对压缩文件(rar)分割后合并 出现 不可预料的压缩文件末端不知道是什么原因?

解决方案 »

  1.   

    未必吧,exe的格式后面是可以添加一些没用的东西的,你的txt文件,后面如果都是0,当然也看不出来。但是压缩文件就不是了。得校验。
    说白了,不用看代码,你的逻辑存在问题,80%是多写东西了。
      

  2.   

    没看到多线程的操作啊,我想楼主也不会边分割边组合文件的
    建议看看.RAR相关资料,问题解决了记得来分享下经验啊
      

  3.   

    RAR解压缩的时候是要检查校验码的,估计是合并文件的时候出错了
      

  4.   

    使用winrar命令解压压缩
    分割合并
      

  5.   

      BinaryWriter tempWriter = new BinaryWriter(fs,System.Text.Encoding.ASCII);BinaryWriter writer = new BinaryWriter(fileStream,System.Text.Encoding.ASCII); BinaryReader tempReader = new BinaryReader(tempStream,System.Text.Encoding.ASCII);统一指定流的编码是ASCII,C#默认的为UTF-8
      

  6.   

    感谢各位的回复 问题原因已经找出 就在此处
    var sorts = from singlefile in fs
    orderby singlefile.Name ascending
    select singlefile;

    排序有问题 使用了 orderby singlefile.CreateTime ascending后 一切正常了  跟踪了下 用 singlefile.Name  temp_10.rar将会排在temp_2.rar前面 文件顺序被打乱  是造成出现问题的原因  
    另外 文件分割请使用二进制的BinaryWriter和BinaryReader进行操作 StreamWriter和StreamReader都会出错....