/// <summary>
        /// zip文件头的实例化
        /// </summary>
        /// <param name="file">资料实体</param>
        /// <returns></returns>
        private E_LocalFileHeader FileHeaderInstance(E_SourceFile file)
        {
            E_LocalFileHeader l = new E_LocalFileHeader();

            l.MinExtractVersion = BitConverter.GetBytes((short)0x000a);
            l.PurposeFlag       = BitConverter.GetBytes((short)0x0800);
            //压缩方法使用默认
            //文件最后修改时间和日期不用管
            l.CRC32          = file.CRC32;
            l.CmpSize        = BitConverter.GetBytes((int)file.FileSize);
            l.UnCmpSize      = BitConverter.GetBytes((int)file.FileSize);
            l.FileNameLength = BitConverter.GetBytes((short)Encoding.UTF8.GetBytes(file.FileName).Length);
            //文件扩展区长度默认为0即可
            l.FileName = Encoding.UTF8.GetBytes(file.FileName);
            //数据区填充null
            l.ExtraField = null;
            return(l);
        }
        /// <summary>
        /// zip中央目录的实例化
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        private E_CentralDirFileHeader CentralDirInstance(E_SourceFile file)
        {
            E_CentralDirFileHeader c = new E_CentralDirFileHeader();

            c.MadeVersion       = BitConverter.GetBytes((short)0x003F);
            c.MinExtractVersion = BitConverter.GetBytes((short)0x000a);
            c.PurposeFlag       = BitConverter.GetBytes((short)0x0800);
            //压缩方法默认0,文件修改时间和日期默认0
            c.CRC32          = file.CRC32;
            c.CmpSize        = BitConverter.GetBytes((int)file.FileSize);
            c.UnCmpSize      = BitConverter.GetBytes((int)file.FileSize);
            c.FileNameLength = BitConverter.GetBytes((short)Encoding.UTF8.GetBytes(file.FileName).Length);
            //扩展域长度,文件注释长度,开始位置的磁盘编号,为0即可
            c.ExternalFileAttr = BitConverter.GetBytes(0x00000020);
            //本地文件头的相对位移具体地方再做计算
            c.FileName = Encoding.UTF8.GetBytes(file.FileName);
            //扩展域和文件注释内容为null即可
            return(c);
        }
Пример #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            E_CompressConfig VCConfig = new E_CompressConfig();

            VCConfig.CRCLevel = Const.EnumCRCLevel.RealTime;
            VCompress           Vcom     = new VCompress(VCConfig);
            List <E_SourceFile> fileList = new List <E_SourceFile>();
            string dirPath = HttpContext.Current.Server.MapPath("/CompressFile/");
            var    dir     = Directory.GetFiles(dirPath);

            foreach (var file in dir)
            {
                FileInfo fi     = new FileInfo(file);
                var      source = new E_SourceFile();
                source.FileName    = fi.Name;
                source.PhyFilePath = fi.FullName;
                source.FileSize    = fi.Length;
                fileList.Add(source);
            }
            Vcom.VirDownload(fileList);
            HttpContext.Current.Response.End();
        }