/// <summary> /// 文件压缩 /// </summary> /// using System.IO; /// using System.IO.Compression; /// <param name="strOrigPath">原始图片路径</param> /// <param name="strAimPath">目标图片路径</param> /// <param name="GzipName">最终文件名</param> /// /// <param name="strExt">扩展名称</param> private void GZipStream(string strOrigPath, string strAimPath, string GzipName,string strExt) { try { //文件流 FileStream reader; //要压缩的文件路径 reader = File.Open(strOrigPath, FileMode.Open); FileStream writer; writer = File.Create(strAimPath); //压缩相关的流 MemoryStream ms = new MemoryStream(); GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress, true); //往压缩流中写数据 byte[] sourceBuffer = new byte[reader.Length]; reader.Read(sourceBuffer, 0, sourceBuffer.Length); zipStream.Write(sourceBuffer, 0, sourceBuffer.Length); //一定要在内存流读取之前关闭压缩流 zipStream.Close(); zipStream.Dispose(); //从内存流中读数据 ms.Position = 0; //注意,不要遗漏此句 byte[] destBuffer = new byte[ms.Length]; //ms.Read(destBuffer, 0, destBuffer.Length); byte[] header = new byte[10]; ms.Read(header, 0, 10); header[3] = 8; //表示包含文件名信息 byte[] fielContent = new byte[ms.Length - 10]; ms.Read(fielContent, 0, fielContent.Length); string strfilename = GzipName + strExt; //指定初始文件名 byte[] filename = System.Text.Encoding.Default.GetBytes(strfilename); writer.Write(header, 0, header.Length); writer.Write(filename, 0, filename.Length); writer.WriteByte(0); //文件名以0 字节结束 writer.Write(fielContent, 0, fielContent.Length); } catch { } finally { //关闭并释放内存流 ms.Close(); ms.Dispose(); //关闭并释放文件流 writer.Close(); writer.Dispose(); reader.Close(); reader.Dispose(); } }