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